c++ - 查找函数链以获得所需的输出

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

最佳答案

不,这不能自动完成。允许一级自动转换,但编译器不会自行执行更多操作。

关于c++ - 查找函数链以获得所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47583748/

相关文章:

c++ - 如何根据其值的属性对 vector 进行排序?

c++ - OpenCV 2.3 不编译, undefined reference 错误

c++ - 使用 GPGME 加密灵活的数据量

c++ - C++ 中的循环包含 - 再次

c++ - 如果

templates - 具体范围示例

c++模板到模板参数

c++ - 用于比较指针 vector 的容器和类型的模板函数

c++ - 未定义行为真的能帮助现代编译器优化生成的代码吗?

c++ - C++中模板常量的默认值