我有一个c ++类,如下所示:
class some_class {
protected:
decide_later some_variable;
public:
void some_random_function();
};
void some_class::some_random_function() {
decide_later another_variable;
}
问题是我在创建类的实例之前不知道some_variable将是什么变量类型。我想做的事情如下:
some_class class_instance(std::string);
这会将decision_later设置为使用std :: string(或int,或double,或者告诉它使用的任何东西)。另外,如果我可以在其他作为类成员的函数中使用decision_later作为变量类型,那将是很好的。例如,在函数some_random_function()。
中我尝试过使用boost :: any来做这件事,但它似乎只适用于数字类型。此外,我认为如果能够实际设置实际变量类型会更有效。
这可能吗?
答案 0 :(得分:7)
您正在寻找模板。声明你的类如:
template <typename T> class some_class {
protected:
T some_variable;
public:
void some_random_function() {
T another_variable;
}
};
并使用:
实例化它some_class<std::string> class_instance();
答案 1 :(得分:2)
如果在创建实例时静态地知道类型,则应使用C ++模板并将类型设为模板参数。
如果你只是动态地知道它(即基于用户输入),你可以分支然后用不同的类型参数实例化模板,或者你可以寻找一个完全动态的解决方案(如boost :: any或等价物)。
但是,我相信如果您不能使用模板执行此操作,那么您的程序设计就会出现问题。 C ++静态类型的概念是在编译时已知类型。通常在面向对象的设计中,您将使用多态而不是弱类型。