是否可以定义FloatType
,以便我可以将f1
声明为
FloatType f1;
而不是
FloatType<> f1;
如果我尝试使用前者,我会得到一个
错误:使用类模板“FloatType”需要模板参数
template <typename T, typename... Args>
class Type
{
};
template <typename... Args>
class Type<float, Args...>
{
};
template <typename... Args>
using FloatType = Type<float, Args...>;
int
main(int, char **)
{
FloatType<> f1;
FloatType<float> f2;
return 0;
}
最佳答案
不,那是不可能的。从标准§14.3/4,强调我的:
When template argument packs or default template-arguments are used, a template-argument list can be empty. In that case the empty
<>
brackets shall still be used as the template-argument-list. [ Example:template <class T = char> class String; String<>* p; // OK: String<char> String* q; // syntax error template <class ... Elements> class Tuple; Tuple<>* t; // OK: Elements is empty Tuple* u; // syntax error
—end example ]
但是,写 FloatType<>
有什么问题吗? ?如果看到空括号确实让您烦恼,您可以为它们引入另一个别名,但这会使事情变得困惑:
using DefFloatType = FloatType<>;
此外,还需要更多打字!
关于c++ - 使用专门的可变参数模板类的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28102382/