使用const char *或const char(&)[]防止重载函数的数组衰减

时间:2018-01-19 19:45:12

标签: c++ arrays c++11

给出以下课程

template <typename T>
class MyClass
{
public:
    void DoSomething(const T* str) {

    }

    template<size_t N>
    void DoSomething(const T(&str)[N]) {

    }
};

有没有办法阻止我的阵列“腐烂”?到(const char*)超载?

以下列方式调用该函数,但似乎优先考虑非模板化函数。

MyClass m<char>;
m.DoSomething("Beep Boop");

我发现我可以通过显式提供模板化参数的值来调用模板化函数。如果可能,我不想这样做。

MyClass m<char>;
m.DoSomething<10>("Beep Boop");

通过可能的重复链接我通过将非模板化方法更改为以下签名来解决此问题:

template<typename = std::enable_if< std::is_convertible<const T*, T const*>, {} >>
void DoSomething(const T* str) {

}

0 个答案:

没有答案