gpt4 book ai didi

c++ - 根据模板的类型名设置私有(private)属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:32 25 4
gpt4 key购买 nike

上下文:
我们正在尝试建立一个名为 Operand 的类模板,它可以采用多种类型作为其类型名 T。 .这些在以下枚举中定义:

enum eOperandType {
INT8
INT16,
INT32,
FLOAT,
DOUBLE
};

那些对应于 <cstdint> 中定义的类型, 即 int8_t, int16_t , 等等。

构造函数必须Operand(std::string const & value); .

template<class T>
class Operand : public IOperand
{

public:
Operand(std::string const & value)
{
std::stringstream ss(value);

ss >> _value;
//_type = ??? ;
}

[...]

private:
Operand(void){}

eOperandType _type;
T _value;
};

接口(interface) IOperand 在这里并不重要,只是运算符重载的一些原型(prototype)。

问题:
设置 _type 的最佳方式是什么?属性?简单的方法是只写几个 if/else iftypeid或类似的东西,但我觉得那会很脏。此外,我只是认为使用 typeid在模板内部就意味着你在某处做错了……对吧?

最佳答案

使用辅助类推导出 _type 的值。

template <typename T> struct OperandType;

template <> struct OperandType<int8_t>
{
static const eOperandType t = INT8;
};

template <> struct OperandType<int16_t>
{
static const eOperandType t = INT16;
};

等等

并将其用作:

Operand(std::string const & value) : type_(OperandType<T>::t)
{
...
}

附言

鉴于您可以在需要时随时推导出 type_ 的值,将其存储为成员变量是否有意义?

关于c++ - 根据模板的类型名设置私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30200027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com