Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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++ 具有n个参数的模板专用构造函数_C++_Templates - Fatal编程技术网

C++ 具有n个参数的模板专用构造函数

C++ 具有n个参数的模板专用构造函数,c++,templates,C++,Templates,我有一个以ints为模板的类(即: template/**/ )。在我的类中,我想要一个完全接受“a”参数的构造函数。我当然可以使它可变,但如果可能的话,我想对长度进行编译时检查。我还认为宏黑客可以工作,但我从寻找内置的C++功能开始。 这是否可能在C++中,如果是这样的话,它怎么可能?< p>处理同一类型的值序列是数组的作用。 您甚至不需要使用原始数组;使用C++11可以使用std::array 例如,像这样: template< int a > class MyClass {

我有一个以ints为模板的类(即:

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;
    }
}