获取 decltype 中使用的模板的基础类型
Get underlying type for a template used in decltype
#include <atomic>
std::atomic<int> bar;
auto foo() -> decltype(bar)
{
return bar++;
}
我收到此 gcc 错误消息:
error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
将 decltype()
中的类型更改为 int
有效。为了使我的代码更通用,我怎样才能获得在 <>
?
之间定义的类型 int
是的,std::atomic
没有 value_type
成员或类似成员,所以这不是 "trivial"。嗯,是的,但有点不是。嗯
如果您受困于 C++11:
auto foo() -> decltype(bar.load())
{
return bar++;
}
不过,从 C++14 开始,您可以简单地写:
#include <atomic>
std::atomic<int> bar;
auto foo()
{
return bar++;
}
你可以这样做:
auto foo() -> decltype(bar.operator++())
{
return bar++;
}
好吧,你不想 return 与酒吧相同类型的东西......
≥ C++98
template<typename T>
T foo() {
return bar++;
}
≥ C++11
auto foo() -> decltype(bar++) {
return bar++;
}
≥ C++14
auto foo() {
return bar++;
}
请注意,当我们来自 C++14(尽管是样板文件)时,C++11 语法看起来是多么简单。
#include <atomic>
std::atomic<int> bar;
auto foo() -> decltype(bar)
{
return bar++;
}
我收到此 gcc 错误消息:
error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
将 decltype()
中的类型更改为 int
有效。为了使我的代码更通用,我怎样才能获得在 <>
?
int
是的,std::atomic
没有 value_type
成员或类似成员,所以这不是 "trivial"。嗯,是的,但有点不是。嗯
如果您受困于 C++11:
auto foo() -> decltype(bar.load())
{
return bar++;
}
不过,从 C++14 开始,您可以简单地写:
#include <atomic>
std::atomic<int> bar;
auto foo()
{
return bar++;
}
你可以这样做:
auto foo() -> decltype(bar.operator++())
{
return bar++;
}
好吧,你不想 return 与酒吧相同类型的东西......
≥ C++98
template<typename T>
T foo() {
return bar++;
}
≥ C++11
auto foo() -> decltype(bar++) {
return bar++;
}
≥ C++14
auto foo() {
return bar++;
}
请注意,当我们来自 C++14(尽管是样板文件)时,C++11 语法看起来是多么简单。