小编Cur*_*Nik的帖子

Boost :: variant的多态setter

我试图使用boost :: variant与模板类型.例如,我有一个模板类型Tag<T>和升压::变体AnyTag包括类型,如Tag<double>,Tag<int>和Tag<std::string>.每个Tag<T>都有类型T的成员.现在,我想将这些变体放在容器中,并在运行时简单地分配值,例如,

for(AnyTag & tag: AllTags) {
    setValue(tag, getValueFromXml()); 
}
Run Code Online (Sandbox Code Playgroud)

该函数setValue(AnyTag &tag, T &val)必须使用AnyTag标记的运行时类型才能正确地为标记分配正确的值.我可以在下面找到解决问题的尝试,并且它使用另一个变体,其中仅包含可以在AnyTag(TagValueType)中使用的可能的T类型.

template<typename T, typename = void>
class Tag {};

template <typename T>
class Tag<T, EnableIf<std::is_arithmetic<T>>> {
public:
    T value = 0;
    std::string address = "";
    T maxValue = std::numeric_limits<T>::max();
    typedef T value_type;
};

template <typename T>
class Tag<T, DisableIf<std::is_arithmetic<T>>> {
public:
    T value;
    std::string address = "";
    typedef T value_type;
};

typedef boost::variant<Tag<std::string>,
                       Tag<double>, …
Run Code Online (Sandbox Code Playgroud)

c++ templates boost

5
推荐指数
1
解决办法
555
查看次数

标签 统计

boost ×1

c++ ×1

templates ×1