我正在使用C ++模板来访问内存保留首选项。内存由句柄引用。为了锁定/解锁该内存,我编写了一个类似于类模板的auto_ptr。当我不想访问其中一个成员时,编译器将发出“身份不明标识符”错误。
typedef struct
{
int value ;
} PREFS ;
template <class T>
class PluginMem
{
private :
T *ptr ;
public :
T *
operator ->
(
)
{
return( ptr ) ;
}
} ;
typedef PluginMem<PREFS> Prefs ;
class PluginContext
{
public :
template <class T>
T *
getNamedPreferences
(
const char *prefsname
) ;
} ;
static void
test()
{
PluginContext ctx ;
Prefs *p ;
p = ctx.getNamedPreferences<Prefs>( "test" ) ;
/*
* unidentified identifier 'value'
*/
p->value = 0 ;
}
我希望这里可以将p-> value更改为零。
答案 0 :(得分:1)
这应该可以解决问题:
(*p)->value
您的p
只是一个指针,您需要首先取消引用它,以便可以使用您的类operator->
注意-如果要跳过解除引用的部分,则需要按值复制Prefs
并使用不带指针标记的值(例如Prefs p
)。请注意,您通常写auto_ptr<foobar> baz
而不是auto_ptr<foobar> * baz