我正在尝试为 std::dynamic_pointer_cast
创建别名,但无法编写可编译的内容。
这就是我正在尝试的方法:
template <typename T1, typename T2>
using dcast = std::dynamic_pointer_cast<T1, T2>;
这有什么问题吗?
编译器错误:
gcc:命名空间“std”中的dynamic_pointer_cast'未命名类型'
clang:命名空间“std”中没有名为“dynamic_pointer_cast”的类型
VS:语法错误:标识符“dynamic_pointer_cast”
尝试一下:https://godbolt.org/g/akbqiu
编辑:正如 Brian 指出的,您只能为类型添加别名,而不能为函数添加别名。
我尝试过以下代码:
template <typename T1, typename T2>
auto& dcast = std::dynamic_pointer_cast<T1, T2>;
这似乎可以自行编译,但是一旦您尝试调用它,就会出现以下错误:
error: wrong number of template arguments (1, should be 2)
不过,您可以仅使用一个模板参数来调用 std::dynamic_pointer_cast
。哪个可以作为替代方案?
最佳答案
正如评论中所说,你必须创建一个新函数:
template <class T, class U>
std::shared_ptr<T> dcast(const std::shared_ptr<U> &r) noexcept
{
return std::dynamic_pointer_cast<T>(r);
}
关于c++ - std::dynamic_pointer_cast 的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51572567/