使编译器假定 const primairy 类型作为类
Make the compiler assume const primairy types as classes?
有人可以为此建议一个更好的标题吗?
我有一个问题,但我不知道如何用正确的英语表达。所以我会通过一些例子来问它:
假设我有一个名为 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);
}
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 我应该使用什么来代替void作为变体中的替代类型之一
- 使编译器假定 const primairy 类型作为类