【问题标题】:Execute a function to affect different template class instances执行一个函数来影响不同的模板类实例
【发布时间】:2012-04-20 06:29:54
【问题描述】:

我有一个复杂的问题,我需要帮助。

我有一个基本情况,

class ParamBase
{
    string paramValue;
    //...
}

还有一堆不同模板参数的类模板。

template <typename T>
class Param : public ParamBase
{
   T value;
   //...
}

现在,每个 Param 实例都有不同的模板参数,double、int、string...等。

为了方便起见,我有一个指向它们的基类指针的向量,其中包含所有已创建的实例:

vector<ParamBase*> allParamsObjects;

问题是:

如何运行单个函数(全局或成员或任何内容,由您选择),将所有这些不同实例的字符串 paramValue 转换为不同的模板参数,并将转换结果保存到 Param::value 中的适当类型。这必须在保存在向量 allParamsObjects 中的所有对象上运行。

所以如果第一个 Param 的模板参数是 double,paramValue 必须转换为 double 并保存在 value 中;如果第二个 Param 的参数是 int,那么第二个的 paramValue 必须转换为 int 并保存在 value 中......等等。

任何帮助将不胜感激:-)

【问题讨论】:

    标签: c++ class templates inheritance polymorphism


    【解决方案1】:

    ParamBase 中声明一个抽象方法Convert,在每个模板派生类中实现它以将字符串转换为值,然后在循环中调用该方法。

    【讨论】:

    • 非常感谢。我明白了:-)
    【解决方案2】:

    这样的?

    class ParamBase {
        std::string paramValue;
    public:
        virtual void convert() = 0;
    };
    
    template <typename T>
    class Param : public ParamBase
    {
        T value;
    public:
        virtual void convert() {
            std::stringstream ss(paramValue);
            ss >> value;
        }
    };
    

    【讨论】:

    • 我有一个使用 boost::lexical_cast 的解决方案,但我认为无论如何它都会使用字符串流。
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 2011-05-04
    • 2014-12-07
    • 1970-01-01
    • 2015-01-06
    • 2017-05-16
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多