在C++ 11中,如何实现适合内置类型层次结构的算术类型?

use*_*829 11 c++ std c++11

基本上,我想实现一种float16类型.但是这个问题不是关于如何做到这一点的细节,而是如何设置,以便我的新float16类型适当地使用float,double和所有整数类型.

我希望我的float16类型可以类似地转换为float或double.例如,它应该隐式地转换为这两种类型.它也应该有std :: common_type(http://en.cppreference.com/w/cpp/types/common_type),因为std :: common_types对其他float类型表现得类似.这意味着std::common_type<my_float16, float>::type = float,std::common_type<my_float16, double>::type = doublestd::common_type<my_float16, T>::type = my_float16其中T是任意整数类型.

我需要编写哪些构造函数和强制转换操作符才能使其工作?任何帮助,将不胜感激!

最近的另一个问题可能是相关的.

编辑:好的,我已经建立了像安东那样的最小例子.它是

struct float16 {
    explicit operator int() {
        return 0;
    }

    operator float() {
        return 0.0f;
    }
};
Run Code Online (Sandbox Code Playgroud)

这对于float和float16有正确的公共类型,但int和float16的公共类型仍然是int.我不明白这个.

use*_*829 0

我将对这个问题提供我自己的答案。

我现在同意 6502,并且我认为这不可能以简单的方式实现。我发现做到这一点的唯一方法是为每种可能的类型组合提供运算符重载。这可以通过模板以稍微更好的方式完成(Boost 运算符,http://www.boost.org/doc/libs/1_59_0/libs/utility/operators.htm是一个很好的例子),但是仍然是大量的工作和样板代码。