C++ 具有n个参数的模板专用构造函数
我有一个以ints为模板的类(即:C++ 具有n个参数的模板专用构造函数,c++,templates,C++,Templates,我有一个以ints为模板的类(即: template/**/ )。在我的类中,我想要一个完全接受“a”参数的构造函数。我当然可以使它可变,但如果可能的话,我想对长度进行编译时检查。我还认为宏黑客可以工作,但我从寻找内置的C++功能开始。 这是否可能在C++中,如果是这样的话,它怎么可能?< p>处理同一类型的值序列是数组的作用。 您甚至不需要使用原始数组;使用C++11可以使用std::array 例如,像这样: template< int a > class MyClass {
template/**/
)。在我的类中,我想要一个完全接受“a”参数的构造函数。我当然可以使它可变,但如果可能的话,我想对长度进行编译时检查。我还认为宏黑客可以工作,但我从寻找内置的C++功能开始。
这是否可能在C++中,如果是这样的话,它怎么可能?
< p>处理同一类型的值序列是数组的作用。 您甚至不需要使用原始数组;使用C++11可以使用std::array
例如,像这样:
template< int a >
class MyClass
{
public:
MyClass( std::array< int, a > const& args )
{}
};
嗯,我希望我的&
位置正确。出于某种我无法理解的原因,我总是忘记那个语法。不管我用过多少次
鉴于OP在评论中澄清了(1)他没有C++11,(2)他想要简单的声明语法,如
如果这个解决方案是可以接受的,那么它本质上就是重新实现
std::array
您可以使用sizeof…
对长度进行编译时检查。我永远不会忘记语法,因为只有正确的语法才能使用这个完全记忆法:。如果您还没有看到这一点或懒得详细查看它,我希望您看到了,并且我希望它能有所帮助。std::array不可用。第二,它看起来正是我想要的,但我很难正确定义它。螺旋戏法看起来很酷,但我甚至不知道上面的(确切)是做什么的?为了清楚起见,我希望能够执行类似于“MyClass m(0,1,2,3);”的操作。谢谢,@IanMallett:给出的代码原来正确地放置了&
,所以没关系。它只涉及您最初关于功能的问题。您现在要求的是创建语法,这需要更复杂的解决方案(您可以直接在C++11中使用方便的语法,但因为您没有std::array
,所以您没有C++11)。我们创建语法的原因非常充分,例如,在boost组件中,可以重复使用无数次。即使这样,对于客户端代码程序员来说,也很难理解它。好吧,所以它不会神奇地给我新的语法,正如我所认为的,上面的代码可能会给我新的语法。我认为初始化列表对我来说几乎是一样好的。谢谢你的帮助,
template< int a >
class MyClass
{
public:
MyClass( std::array< int, a > const& args )
{}
};
template< int a >
class MyClass
{
public:
MyClass( int const (&args)[a] )
{}
};
MyClass<4> m(0,1,2,3);
#include <stddef.h>
typedef ptrdiff_t Size;
typedef Size Index;
template< Size a >
class MyClass
{
public:
static Size const n = a;
static Size size() { return n; }
int elems_[n];
int operator[]( Index const i ) const { return elems_[i]; }
int& operator[]( Index const i ) { return elems_[i]; }
};
#include <iostream>
using namespace std;
int main()
{
MyClass< 3 > x = {100, 200, 300};
for( int i = 0; i < x.size(); ++i )
{
wcout << x[i] << endl;
}
}