我们说我有以下模板:
template<class out_t, class in_t>
out_t my_cast(const in_t&) = delete;
然后是几个专业:
template<>
B my_cast<B, A>(const A& a) { /* stuff */ }
template<>
X my_cast<X, A>(const A& a) { /* stuff */ }
template<>
C my_cast<C, B>(const B& b) { /* stuff */ }
template<>
C my_cast<C, X>(const X& x) { /* stuff */ }
template<>
V my_cast<V, A>(const A& a) { /* stuff */ }
template<>
Z my_cast<Z, V>(const V& v) { /* stuff */ }
如果我想从A
投射到Z
,我必须合并两个演员:auto z = my_cast<Z>(my_cast<V>(some_a))
;
这显然是一个例子,我想象我必须经历数十次这样的演员表,并且手动编码显然是不行的。有没有办法在编译时自动找到这些路径,以便my_cast<Z>(some_a)
自动解决?
这可能会导致一些含糊之处,例如从A
转换为C
,这可以通过两种方式完成:A→B→C或A→X→C。在这种情况下,编译错误会令人满意。
答案 0 :(得分:0)
不,这不能自动完成。允许一级自动转换,但编译器本身不会做更多的事情。