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

Set variable type for a c++ class variable during instantiation

本文关键字:类变量 变量 类型 c++ 设置 实例化      更新时间:2023-10-16

我有一个 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);

这将decide_later设置为使用 std::string(或 int,或双精度,或任何被告知使用的内容)。此外,如果我以后可以在作为类成员的其他函数中使用 decide_later 作为变量类型,那就太好了。例如,在函数 some_random_function() 中。

我尝试使用 boost::any 来执行此操作,但它似乎仅适用于数字类型。此外,我认为如果我能实际设置实际的变量类型会更有效。

这可能吗?

您正在寻找模板。像这样声明你的类:

template <typename T> class some_class {
    protected:
        T some_variable;
    public:
        void some_random_function() {
            T another_variable;
        }
};

并通过以下方式实例化它:

some_class<std::string> class_instance();

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

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

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