C++11 从decltype中删除类成员类型部分
在对模板类的成员使用C++11 从decltype中删除类成员类型部分,c++11,g++,decltype,C++11,G++,Decltype,在对模板类的成员使用decltype时,我遇到了我以前从未见过的案例。我想做一个更好的make_unique,这样更改成员的类型不会导致修复make_unique调用。我想使用decltype(member)::element\u type作为make\u unique的类型来避免这种情况,但出现了一个错误。下面是一个显示错误的简单代码段(我理解为什么会显示它): 但这似乎给出了一个解析错误。您只需在decltype()之前放置一个typename 我是说 p_ = std::make_
decltype
时,我遇到了我以前从未见过的案例。我想做一个更好的make_unique
,这样更改成员的类型不会导致修复make_unique
调用。我想使用decltype(member)::element\u type
作为make\u unique
的类型来避免这种情况,但出现了一个错误。下面是一个显示错误的简单代码段(我理解为什么会显示它):
但这似乎给出了一个解析错误。您只需在
decltype()之前放置一个typename
我是说
p_ = std::make_unique<typename decltype(p_)::element_type>();
p_u=std::使_唯一();
我不明白你到底想要什么:把typename
放在decltype(p)
之前有什么不对?或者通过使用
的声明之前的类型?@max66typename
完全可以-我想去掉(foo*)this)->foo::p
部分。@max66我虽然可以通过*p
和std::remove_引用
来解决这个问题,但这在coliru中给出了一个解析错误:(@max66,谢谢你的输入,问题还不清楚-我在问题中添加了我想去掉的部分。但是std::make_unique();
也用g编译++
p_ = std::make_unique<decltype(std::remove_reference(*p_)::type)>();
p_ = std::make_unique<typename decltype(p_)::element_type>();