提问人:Jazzwave06 提问时间:9/5/2023 更新时间:9/5/2023 访问量:21
在另一个模板中推断一个模板的模板参数
Deducing template parameters of a template within another template
问:
我正在尝试在给定表达式中推断视图模板参数:
object<bool> object;
object<bool>::view view = object.make_view(std::string("compA"), std::string("compB"));
// instead of expliciting template parameters
// object<bool>::view<false, 2> view = object.make_view(std::string("compA"), std::string("compB"));
使用给定的代码:
template <typename owner_t>
struct object
{
template <bool const_v, std::size_t component_v>
struct view
{
using object_t = std::conditional_t<const_v, const object, object>;
object_t& object;
std::array<std::string, component_v> components;
template <typename... components_t>
inline view(object_t& object, components_t&&... components)
: object(object),
components {std::forward<components_t>(components)...}
{
}
};
template <typename... components_t>
view(const object&, components_t&&...)
-> view<true, sizeof...(components_t)>;
template <typename... components_t>
view(object&, components_t&&...)
-> view<false, sizeof...(components_t)>;
template <typename... components_t>
inline auto make_view(components_t&&... components)
{
return view {
*this,
std::forward<components_t>(components)...,
};
}
};
它似乎适用于 clang,但不适用于 MSVC。如果我删除所有者模板参数并创建一个普通的非模板化类型,它将正确编译。有没有人遇到过这个问题,你有没有找到解决方案?object
编译器资源管理器的链接:https://godbolt.org/z/1Y46rY54T
答:
1赞
463035818_is_not_an_ai
9/5/2023
#1
我承认,我不知道为什么或 msvc 拒绝您的代码是否正确,但这编译了:
auto vi = obj.make_view(std::string("compA"), std::string("compB"));
下一个:函数参数包专用化
评论