C++ 模板中的默认参数
有没有可能有这样的东西:C++ 模板中的默认参数,c++,templates,C++,Templates,有没有可能有这样的东西: template<class T = unsigned = 64> class X { }; 模板 X类 { }; 基本上就是说,如果没有指定任何内容,那么unsigned应该是类型,它的值应该是64。不太可能。不过,你可以做一些接近的事情: template < typename T = unsigned, T value = 64> struct X{}; 模板 结构X{}; 编辑:当我读到你的另一个答案时,我意识到如果你真的想做的话,
template<class T = unsigned = 64>
class X
{
};
模板
X类
{
};
基本上就是说,如果没有指定任何内容,那么unsigned应该是类型,它的值应该是64。不太可能。不过,你可以做一些接近的事情:
template < typename T = unsigned, T value = 64>
struct X{};
模板
结构X{};
编辑:当我读到你的另一个答案时,我意识到如果你真的想做的话,你还可以做些别的事情:
template < unsigned N = 64 >
struct unsigned_
{
typedef unsigned type;
enum { value = N };
};
// alternative versions...int, long, etc...
template < typename T = unsigned_<64> >
struct X {};
模板
无符号结构_
{
typedef无符号类型;
枚举{value=N};
};
//可选版本…int、long等。。。
模板
结构X{};
这为用户创造了更多的工作。您可以通过使用boost::enable_if and is_basical来解决其中的一些问题,这样用户就可以提供一个基本类型,而无需您进行细分,因为您正在寻找T::type和T::value
所以,虽然没有办法精确地完成你想要的东西……但从用户的角度看,这取决于你想要的丑陋程度。从字面上看,这是没有意义的。首先解释你想做什么 < C++ >模板有三种参数:1)类型参数,2)值(非类型)参数,3)模板参数。 当您将一个参数声明为
class T
时,它是一个类型参数(第一类)。它的“值”实际上是一种类型<例如,代码>未签名的。即T
的“值”是无符号的
<在这个类X
模板的实例化中,将用code>无符号代替T
。参数T
不能有任何数值,如64
然而,您似乎试图在种类1和种类2参数之间创建某种混合。首先,这是不可能的。其次,没有办法弄清楚它可能有什么语义。请澄清你的意图
如果要传递数值,必须创建第二种类型的模板参数:值参数,如中所示
template <unsigned N = 64>
class X {
};
模板
X类{
};
因此,您需要首先确定真正需要哪种模板参数:类型参数还是值参数。或者两者兼而有之。您尚未提供有关类X
的任何详细信息,因此无法猜测您要做什么