Ser*_*gei 6 c++ stl c++11 reference-wrapper c++14
假设我们有一些可变参数模板,需要以std::reference_wrapper不同方式处理参数.我们怎样才能做到这一点?
krz*_*zaq 12
你可以制作一个特征来判断一个类型是否存在 reference_wrapper
template<typename T>
struct is_reference_wrapper : false_type {};
template<typename T>
struct is_reference_wrapper<reference_wrapper<T>> : true_type{};
Run Code Online (Sandbox Code Playgroud)
然后你可以用它来消除歧义:
template<typename T>
void do_stuff(T&& t, false_type)
{
cout << "Normal: " << t << endl;
}
template<typename T>
void do_stuff(T&& ref, true_type)
{
cout << "Ref: " << ref.get() << endl;
}
template<typename... Ts>
void foo(Ts&&... ts)
{
[[maybe_unused]] int arr[] = {
(do_stuff(forward<Ts>(ts), is_reference_wrapper<decay_t<Ts>>{}), 0)...
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |