Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板中的默认参数_C++_Templates - Fatal编程技术网

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
的任何详细信息,因此无法猜测您要做什么