声明不带参数的模板
Declare template without parameters
是否可以声明一个没有参数的模板?
我有一个模板,像:
template < int i, int j>
class X{
int doSomething() { return i+j;}
}
,现在我想在另一个类中使用这个模板,但我不知道它的参数,因为它们是可变的。但是我想把不同的模板保存在一个变量中,像这样:
class Foo {
X var;
void setVar ( const X &newVar) { var = newVar; }
X getVar () { return var;}
}
是否有办法在一个变量中保存不同类型的模板?还是指针?
谢谢你的帮助
模板在编译时解析;模板参数不能依赖于运行时才知道的值。此外,每个模板实例都是不同的类型:X<1, 2>
和X<3, 4>
是不同的,就像Foo
和Bar
是不同的两个类一样;一种类型的变量不能保存另一种类型的值。你不能有一个只有X
类型的变量,因为X
不是一个类型(它是一个模板)。
模板没有形参是没有意义的;在这种情况下,您根本不需要模板。不清楚为什么要尝试使用模板来添加两个变量。您可能只想使用一个类来保存传递给其构造函数的两个整数:
class X {
private:
int i, j;
public:
X(int i, int j): i(i), j(j) { }
int doSomething() const { return i + j; }
};
这将允许您拥有类型为X
的变量,并且您可以在运行时基于变量为i
和j
构造具有不同值的X
的不同实例。
您可能希望使用类型擦除。boost::any
提供了一个很好的实现,可能足以满足您的用例。以下是根据您的情况修改的示例:
BOOST_TYPE_ERASURE_MEMBER((canDoSomething), doSomething, 0)
class Foo {
using X = any<canDoSomething<int(void)>>;
X var;
void setVar ( const X &newVar) { var = newVar; }
X getVar () { return var;}
int DoSomethingWithX() { return var.doSomething();}
}
相关文章:
- Arduino C++在构造函数中用参数声明对象数组
- 如何使用参数声明实例?
- 从非类型模板参数声明 constexpr 数组的可移植方法
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 在实现文件中使用模板参数声明方法
- 使用 std::move 将参数传递给函数,如果该参数声明为按值传递或使用移动操作数 &&,是否有区别?
- 如果我提前将参数声明为变量而不是将它们内联写入函数调用,那有什么区别(在内存方面)?
- 为什么重载运算符>在参数声明 const 时不起作用?
- 字符串无法启动参数声明
- 视觉C++:即使使用关键字,参数声明也会隐藏类成员"this"
- C 迭代器从Typedef std :: Map作为模板参数声明
- 参数声明中的"const T const"
- 如何处理"警告:在参数声明中使用'auto'仅适用于 -fconcepts"
- 将容器作为模板参数声明过滤
- 同时使用模板和参数声明对象
- 从variadic模板参数声明成员变量
- 在 C++ 中,为什么我们在重载函数中将引用参数声明为 const
- 在C++中,是否可以使用定义中未使用的模板参数声明模板结构?
- C++ "无法将参数声明为抽象类型
- 默认参数声明:为什么默认字符串参数必须是 const