C++ 可变模板中元函数的最大大小
我试图在可变模板中实现一个元函数(?),以计算编译时少数类型的C++ 可变模板中元函数的最大大小,c++,c++11,templates,metaprogramming,variadic-templates,C++,C++11,Templates,Metaprogramming,Variadic Templates,我试图在可变模板中实现一个元函数(?),以计算编译时少数类型的sizeof的最大值 template<typename... Ts> struct MaxSizeof { static constexpr size_t value = 0; }; template<typename T, typename... Ts> struct MaxSizeof { static constexpr size_t value = std::max(sizeof(T), t
sizeof
的最大值
template<typename... Ts> struct MaxSizeof {
static constexpr size_t value = 0;
};
template<typename T, typename... Ts> struct MaxSizeof {
static constexpr size_t value = std::max(sizeof(T), typename MaxSizeof<Ts...>::value);
};
你能帮我修改密码吗
编译器是MSVC++2017工具集v141。
std::max
自C++14以来仅标记为constepr
,因此您必须自己编写。此外,不能重载结构,这也是代码失败的原因之一
这里有一个解决方案需要C++14的std::max
,您可以根据需要更改为使用自定义的解决方案
template<typename... Ts>
struct MaxSizeof : std::integral_constant<std::size_t, std::max({sizeof(Ts)...})> {};
模板
结构MaxSizeof:std::integral_常量{};
std::max
自C++14以来仅标记为constepr
,因此您必须自己编写。此外,不能重载结构,这也是代码失败的原因之一
这里有一个解决方案需要C++14的std::max
,您可以根据需要更改为使用自定义的解决方案
template<typename... Ts>
struct MaxSizeof : std::integral_constant<std::size_t, std::max({sizeof(Ts)...})> {};
模板
结构MaxSizeof:std::integral_常量{};
需要两个修复程序:
static
的value
定义structmaxsizeof{
而不是简单地structmaxsizeof{
template<typename... Ts> struct MaxSizeof {
static constexpr size_t value = 0;
};
template<typename T, typename... Ts> struct MaxSizeof<T, Ts...> {
static constexpr size_t value = std::max(sizeof(T), typename MaxSizeof<Ts...>::value);
};
模板结构MaxSizeof{
静态constexpr size\u t值=0;
};
模板结构MaxSizeof{
静态constexpr size\u t value=std::max(sizeof(t),typename MaxSizeof::value);
};
需要两个修复程序:
static
的value
定义structmaxsizeof{
而不是简单地structmaxsizeof{
template<typename... Ts> struct MaxSizeof {
static constexpr size_t value = 0;
};
template<typename T, typename... Ts> struct MaxSizeof<T, Ts...> {
static constexpr size_t value = std::max(sizeof(T), typename MaxSizeof<Ts...>::value);
};
模板结构MaxSizeof{
静态constexpr size\u t值=0;
};
模板结构MaxSizeof{
静态constexpr size\u t value=std::max(sizeof(t),typename MaxSizeof::value);
};
您的专业化没有正确的语法,应该是:
template<typename T, typename... Ts>
struct MaxSizeof<T, Ts...> { // Note the <T, Ts...> here
// ....
};
模板
struct MaxSizeof{//注意这里的
// ....
};
您的专业化没有正确的语法,应该是:
template<typename T, typename... Ts>
struct MaxSizeof<T, Ts...> { // Note the <T, Ts...> here
// ....
};
模板
struct MaxSizeof{//注意这里的
// ....
};
需要另一个次要修复:
template<typename T, typename... Ts> struct MaxSizeof<T, Ts...> {
static constexpr size_t value = std::max(sizeof(T), MaxSizeof<Ts...>::value); // there should be with no `typename`
};
模板结构MaxSizeof{
static constexpr size\u t value=std::max(sizeof(t),MaxSizeof::value);//应该没有'typename'的
};
需要另一个次要修复:
template<typename T, typename... Ts> struct MaxSizeof<T, Ts...> {
static constexpr size_t value = std::max(sizeof(T), MaxSizeof<Ts...>::value); // there should be with no `typename`
};
模板结构MaxSizeof{
static constexpr size\u t value=std::max(sizeof(t),MaxSizeof::value);//应该没有'typename'的
};
constexpr之前是否缺少静态数据?@Phil1970,谢谢,我已更新了代码和错误消息。constexpr之前是否缺少静态数据?@Phil1970,谢谢,我已更新了代码和错误消息。但在“Varidic数据结构”下的第一个示例中作者似乎重载了一个结构,不是吗?@SergeRogatch如果你指的是第一个,那就是一个函数。后面有一个结构,这是部分专门化。但在第一个例子中,在“变量数据结构”下作者似乎重载了一个结构,不是吗?@SergeRogatch如果你指的是第一个,那是一个函数。后面有一个结构,那就是部分专门化。