Vin*_*ent 3 c++ forwarding member auto c++14
考虑一个具有private std::vector数据成员的类:
class MyClass
{
private:
std::vector<double> _data;
public:
template <class... Args>
/* something */ insert(Args&&... args) /* something */
{
return _data.insert(std::forward<Args>(args)...);
}
};
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法(使用C++ 14自动/可变参数模板/前进...)传输的给定函数_data来MyClass(例如insert这里),并为用户提供相同的接口?
正确的语法是这样的:
class MyClass
{
private:
std::vector<double> _data;
public:
template <class... Args>
decltype(auto) insert(Args&&... args)
{
return _data.insert(std::forward<Args>(args)...);
}
};
Run Code Online (Sandbox Code Playgroud)
但是,实际上并不需要C++ 14来完成它.您可以使用C++ 11语法.
class MyClass
{
private:
std::vector<double> _data;
public:
template <class... Args>
auto insert(Args&&... args)
-> decltype(_data.insert(std::forward<Args>(args)...))
{
return _data.insert(std::forward<Args>(args)...);
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |