我希望能够在重载分辨率中区分数组和指针:
class string {
public:
string(const char* c_str);
template<int N>
string(const char (&str) [N]);
};
int main() {
const char* c_str = "foo";
string foo(c_str); // ok will call string(const char*)
string bar("bar"); // call string(const char*) instead of the array version
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我发现的最好的是使用指针的引用而不是指针:
class string {
public:
string(const char*& c_str);
template<int N>
string(const char (&str) [N]);
};
int main() {
const char* c_str = "foo";
string foo(c_str); // ok will call string(const char*)
string bar("bar"); // ok, will call …Run Code Online (Sandbox Code Playgroud)