【问题标题】:Conditional typing based on pointer or value type [duplicate]基于指针或值类型的条件类型
【发布时间】:2019-07-14 08:11:05
【问题描述】:

我想知道是否可以根据模板参数是否为指针进行一些条件输入?

例如,如果它是一个指针(即 T*),我希望下面的 get 方法返回 T 本身。或者 T* 如果不是指针(即 T)。

template<typename T>
class MyContainer {
    T get(); // If T is a pointer
    T* get(); // If T is not a pointer
}

【问题讨论】:

  • std::remove_pointer_t&lt;T&gt; * get();怎么样
  • @MichaelChourdakis 几乎是一样的,但对我帮助不大。我认为它是基于参数的重载解决方案。我的get() 方法没有任何参数。
  • I think it is basing the overload resolution based on the parameter. - 不,不是。
  • @MichaelChourdakis 你是对的,它可能是重复的。

标签: c++


【解决方案1】:

判断是否是指针,如果不是:

#include <type_traits>

template<typename T>
class MyContainer {
    std::conditional_t<std::is_pointer<T>::value, T, T*> get();
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多