使编译器假定 const primairy 类型作为类

Make the compiler assume const primairy types as classes?

本文关键字:类型 primairy const 编译器      更新时间:2023-10-16

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

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

假设我有一个名为 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的重载 print

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

您可以考虑的另一种方法是使用用户定义的文本:

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

然后你可以写:

 print(3.14_D);

您可以创建 Double 的构造函数,该构造函数将 double 作为参数,然后在 3.14 示例中,它将隐式转换为 double。您甚至可以为其指定默认值。

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