有人可以建议一个更好的头衔吗?
我有一个问题,但我不知道如何用正确的英语。所以我会通过一些例子来问它:
假设我有一个名为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?
我希望有人可以帮助我。提前谢谢!
答案 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);
}