我创建了两种类型:
如何解决这个问题?
bool_t
和number_t
,我想将其中一种转换为另一种(双向均可)。然而,我在将bool_t
转换为number_t
时遇到了一些问题。
基本上我想做的是这样的(但它不能编译):
template<bool v>
struct bool_t {
template<template<int> typename T>
operator T<v ? 1 : 0>() {
return {};
}
};
template<int N>
struct number_t {
template<int n1, int n2>
friend number_t<n1 + n2> operator+(number_t<n1>, number_t<n2>) {
return {};
}
};
int main() {
number_t<0>{} + bool_t<0>{};
}
错误信息如下:
prog.cc:19:19: error: invalid operands to binary expression ('number_t<0>' and 'bool_t<0>')
number_t<0>{} + bool_t<0>{};
~~~~~~~~~~~~~ ^ ~~~~~~~~~~~
prog.cc:12:26: note: candidate template ignored: could not match 'number_t' against 'bool_t'
friend number_t<n1 + n2> operator+(number_t<n1>, number_t<n2>) {
^
1 error generated.
如何解决这个问题?
bool_to_number
的函数吗? - Antoine Morrieroperator+
定义。但是,如果我定义了template <int> class Thing;
,你真的希望bool_t<true>{}
在不知道更多信息的情况下隐式转换为Thing<1>{}
吗? - ascheplertemplate<bool v> struct bool_t { operator number_t<v ? 1 : 0>() const; };
?根据实际需要的泛化类型,可能还有其他合理的解决方案。 - aschepler