在实例化期间为c ++类变量设置变量类型

时间:2012-05-12 06:18:15

标签: c++ variables variable-types

我有一个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来做这件事,但它似乎只适用于数字类型。此外,我认为如果能够实际设置实际变量类型会更有效。

这可能吗?

2 个答案:

答案 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 ++静态类型的概念是在编译时已知类型。通常在面向对象的设计中,您将使用多态而不是弱类型。