找到一系列函数来获得所需的输出

时间:2017-11-30 22:33:27

标签: c++ templates

我们说我有以下模板:

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。在这种情况下,编译错误会令人满意。

1 个答案:

答案 0 :(得分:0)

不,这不能自动完成。允许一级自动转换,但编译器本身不会做更多的事情。