假设我有以下模板:
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。在这种情况下,编译错误会令人满意。
最佳答案
不,这不能自动完成。允许一级自动转换,但编译器不会自行执行更多操作。
关于c++ - 查找函数链以获得所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47583748/