只是一个示例代码:
template <class T> class TempBase
{
protected:
string m_str;
};
template <class T> class Temp: public TempBase<T>
{
public:
void method()
{
string
&s = TempBase<T>::m_str //reference works fine
/*NOTE compile failed:
error: ‘std::string TempBase<int>::m_str’ is protected
error: within this context
error: cannot convert ‘std::string TempBase<int>::* {aka std::basic_string<char> TempBase<int>::*}’ to ‘std::string* {aka std::basic_string<char>*}’ in initialization
*/
, *ps = &TempBase<T>::m_str
, *ps2 = &m_str //compile failed, obviously: ‘m_str’ was not declared in this scope
, *ps3 = &s //this is workaround, works fine
;
}
};
void f()
{
Temp<int> t;
t.method();
}
std::string *
目标:具有祖先成员的类型的初始化指针TempBase<T>::m_str
。
问题:正确的语法未知
评论:之前的代码包含 2 个故意的编译错误:
- 尝试将成员指针转换为数据指针
- 模板祖先成员必须完全合格
和 1 个解决方法。
问题:在这种情况下,获取指向祖先数据的指针的正确语法是什么?