【发布时间】:2014-02-24 20:57:30
【问题描述】:
我的类层次结构中的继承和方法解析有一个奇怪的问题。代码正在使用带有-O0 的clang++ 5.0 编译。我有两个这样的课程:
class PrintBase
{
protected:
static wstring_convert<codecvt_utf8<wchar_t>> sConverter;
public:
virtual void PrintChar(wchar_t ch) = 0;
inline void PrintChar(char ch)
{
PrintChar(sConverter.from_bytes(ch)[0]);
}
virtual void PrintString(const wstring& str) = 0;
inline void PrintString(const string& str)
{
PrintString(sConverter.from_bytes(str));
}
};
class Print: public PrintBase
{
public:
virtual void PrintChar(wchar_t ch) override;
virtual void PrintString(const wstring& str) override;
};
void Print::PrintChar(wchar_t ch)
{
// do stuff
}
void Print::PrintString(const wstring& str)
{
// do stuff
}
如果我构造一个 Print 实例 Print* pnt = new Print(); 并调用 pnt->PrintChar('c');,它会正确调用内联基类方法,进行转换,然后正确调用派生类中实现的虚拟覆盖。
如果我调用 pnt->PrintString("test"); 或 pnt->PrintString(string("test")); 或 pnt->PrintString(someString); 我会收到错误消息:
No viable conversion from 'basic_string<char, char_traits<char>, allocator<char>>' to 'const basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>'
...在“from”类型的常量上有一些变化。拨打pnt->PrintString(L"test"); 或类似电话将按预期工作。我可以强制它使用pnt->PrintBase::PrintString("test");调用内联字符串&函数
为什么它能够正确解析和调用基类中的内联char方法,但在没有显式解析作用域的情况下无法对string&方法这样做?
【问题讨论】:
-
我不小心提前提交了问题,编辑刚刚因站点维护而停机!如果您在我有机会完成问题之前偶然发现此问题,请稍后再回来查看。
标签: c++ inheritance c++11 clang inline