使编译器假定const主类型为类?

时间:2012-10-12 11:42:53

标签: c++ compiler-construction types

  

有人可以建议一个更好的头衔吗?

我有一个问题,但我不知道如何用正确的英语。所以我会通过一些例子来问它:

假设我有一个名为Double的结构:

struct Double
{
    // Declarations/Definitions here
}

它被用作主要类型double。几乎完全相同,除了我的类有一些功能,如:

void Double::event_serialize(Stream& stream);
String Double::event_representate();

所以我必须为这种类型(以及其他类型)创建一个包装器。

现在我有一个这样的函数,例如:

template<class T> void print(T value)
{
    std::cout << value.event_representate() << std::endl;
}

现在我可以将它用作以下组合:

Double x = 3.14;
print(x);

但如果我想用它作为:

print(3.14);

编译器将执行以下操作:

const double __invis_value_1 = 3.14;

print(__invis_value_1);

右?

如何确保(如果可能)编译器将其检测为Double而不是primairy类型double?

我希望有人可以帮助我。提前谢谢!

2 个答案:

答案 0 :(得分:2)

您可以提供print的重载,将double转换为Double

void print(double value) {
    print<Double>(Double(value));
}

您可能会考虑使用用户定义的文字:

inline constexpr Double operator"" _D(long double value) {
    return Double(value);
}

然后你可以写:

 print(3.14_D);

答案 1 :(得分:0)

你可以创建一个Double的构造函数,它将double作为参数构建,然后在3.14示例中,它将被隐式地转换为double。你甚至可以给它一个默认值。

struct Double
{
    // Declarations/Definitions here
    Double(double value = 0.0);
}