【问题标题】:Set variable type for a c++ class variable during instantiation在实例化期间为 c++ 类变量设置变量类型
【发布时间】:2012-05-12 06:18:14
【问题描述】:

我有一个 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 来执行此操作,但它似乎只适用于数字类型。另外,我认为如果我能真正设置实际的变量类型会更有效。

这可能吗?

【问题讨论】:

    标签: c++ variables variable-types


    【解决方案1】:

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

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

    并使用以下方法实例化它:

    some_class<std::string> class_instance();
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-10
        • 2015-06-09
        • 1970-01-01
        • 2019-02-01
        • 2022-06-14
        • 2014-02-25
        相关资源
        最近更新 更多