1

有人可以为此建议一个更好的标题吗?

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

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

struct Double
{
    // Declarations/Definitions here
}

它被用作主要类型的替身。几乎完全一样,除了我的班级有一些功能,比如:

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 而不是主要类型 double?

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

4

2 回答 2

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);
于 2012-10-12T11:53:56.337 回答
0

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

struct Double
{
    // Declarations/Definitions here
    Double(double value = 0.0);
}
于 2012-10-12T11:49:31.297 回答