我正在尝试在可变参数模板中实现metafunction(?),以在编译时计算几种类型的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);
};


但是我遇到了一些奇怪的错误:

MaxSizeof.h(7): error C3855: 'MaxSizeof': template parameter 'Ts' is incompatible with the declaration
MaxSizeof.h(7): error C2977: 'MaxSizeof': too many template arguments
MaxSizeof.h(5): note: see declaration of 'MaxSizeof'


您能帮我修改代码吗?

编译器为MSVC ++ 2017工具集v141。

最佳答案

您的专业化语法不正确,应为:

template<typename T, typename... Ts>
struct MaxSizeof<T, Ts...> { // Note the <T, Ts...> here
    // ....
};

08-16 02:06