如何基于指针与非指针类型重载成员函数

mik*_*stz 4 c++

鉴于以下情况:

template <typename T>
class Whatever
{
public:
    Whatever(T &&t): _t(std::move(t)) { }

private:
    T _t;
};
Run Code Online (Sandbox Code Playgroud)

何时T是指针类型,我需要检查构造函数的targ以查看它是否-1(不要求),并nullptr在将其分配给之前将其更改为a _t. 换句话说,我需要为指针类型重载此构造函数.

有谁知道这是否可行?

注意:即使我在指针类型上部分地专门化类,我希望该类在可能的情况下从上面的类本身继承(因为除了这两个类的行为是相同的),但是不知道这是否可能.任何帮助,将不胜感激.谢谢.

Pio*_*cki 5

您可以使用标记分派和委托构造函数:

#include <type_traits>

template <typename T>
class Whatever
{
public:
    Whatever(T&& t)
        : Whatever(std::move(t), std::is_pointer<T>{})
    {
    }

private:
    Whatever(T&& t, std::true_type)
        : _t(/*initialize _t as a pointer*/)
    {
    }

    Whatever(T&& t, std::false_type)
        : _t(/*initialize _t as a non-pointer*/)
    {
    }

    T _t;
};
Run Code Online (Sandbox Code Playgroud)