3

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

这可能吗?

4

2 回答 2

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();
于 2012-05-12T06:24:35.633 回答
2

如果您在创建实例时静态地知道类型,则应该使用 C++ 模板并将类型作为模板参数。

如果您只是动态地知道它(即基于用户输入),您可以然后分支并使用不同类型参数实例化模板,或者您可以寻求完全动态的解决方案(如 boost::any 或等效的)。

但是,我相信如果你不能用模板做到这一点,那么你的程序设计就有问题。C++ 静态类型的想法是在编译时类型是已知的。通常在面向对象的设计中,您会使用多态性而不是弱类型。

于 2012-05-12T06:24:49.917 回答