具有 n 个参数的模板专用构造函数
Template Specialized Constructor With n Arguments
我有一个用整数模板化的类(即:
template </*...*/, int a> /*...*/
)。 在我的课堂上,我想要一个完全接受"a"参数的构造函数。 我当然可以使它变频,但如果可能的话,我希望对长度进行编译时检查。 我也认为宏黑客可以工作,但我首先寻找内置的C++功能。
这在C++可能吗,如果是这样,怎么能做到?
处理相同类型的值序列是数组的用途。
您甚至不需要使用原始数组;使用 C++11,您可以使用 std::array
。
例如,像这样:
template< int a >
class MyClass
{
public:
MyClass( std::array< int, a > const& args )
{}
};
如果你的编译器没有提供std::array
那么你可以很容易地定义一个相应的类,或者你可以只使用一个原始数组:
template< int a >
class MyClass
{
public:
MyClass( int const (&args)[a] )
{}
};
嗯,我希望我在那里正确放置&
。出于某种我无法理解的原因,我总是忘记该语法。无论我用了多少次。
鉴于 OP 在评论中澄清了 (1) 他没有 C++11 和 (2) 他想要简单的声明语法,例如
MyClass<4> m(0,1,2,3);
一种可能性是使MyClass
聚合可以通过 C++03 大括号初始值设定项初始化,即没有用户定义的构造函数:
#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;
}
}
如果此解决方案可以接受,那么它本质上是重新实现std::array
。
相关文章:
- 具有专用化的模板类中的可靠条件复制和移动构造函数
- 构造函数 (g++) 的显式模板专用化
- 构造函数的部分模板专用化
- 如何在另一个类模板中定义完全专用类的构造函数
- 模板专用类之间的构造函数重载
- 使用模板的构造函数专用化
- 如何将模板构造函数专用化移动到 cpp 文件
- 模板类模板构造函数专用化
- 定义专用模板类构造函数时避免重复
- 模板化类的模板化构造函数的显式模板专用化
- 具有 n 个参数的模板专用构造函数
- 不会调用模板化构造函数的专用模板
- 没有模板参数的类的C++专用构造函数(跳过尖括号)
- 专用于非模板类的模板化构造函数
- 专用于模板类构造函数
- C++单个构造函数模板专用化
- 模板专用化没有匹配的构造函数
- 在模板专用化中添加单个构造函数方法
- 从派生类实现基类构造函数专用化的替代方法是什么
- 类定义中构造函数的模板专用化