最近我在<filesystem>
中使用函数,例如std::filesystem::exists
。这些函数接受std::filesystem::path
。我注意到将const char*
之类的"/abc"
传递给std::filesystem::exists
之类的功能,例如std::filesystem::exists("/abc")
我的问题是,似乎在将const char*
传递到std::filesystem::exists
时,我们正在进行从const char*
到filesystem::path
的隐式转换。
filesystem::path
类上处理此问题?class A {
A(const char*& msg) {
std::cout << msg << std::endl;
}
};
void func(const A& p) {
}
int main(int argc, const char * argv[]) {
func("123"); // No matching function for call to 'func'
return 0;
}
答案 0 :(得分:1)
首先,将构造函数设为Public。
其次,代码中A
的构造函数采用const char*&
引用了const char*
,因此const char*
不会隐式转换为A
因为const char*&
是左值引用,而const char*
是右值(基本上是无名的临时值)
尝试一下,它将起作用
#include<iostream>
class A {
public:
A(const char* msg) {
std::cout << msg << std::endl;
}
};
void func(const A& p) {
}
int main(int argc, const char * argv[]) {
func("123"); // No matching function for call to 'func'
return 0;
}
哪个构造函数在filesystem :: path类上处理此问题
根据cppreference,(5)构造函数
template< class Source >
path( const Source& source, format fmt = auto_format );
负责从const char*
到std::filesystem::path
的隐式类型转换