2
Possible Duplicate:
Making a template parameter a friend?如何使一類非可繼承
C++ FAQ 23.11 How can I set up my class so it won't be inherited from? 列出了下面的代碼:
class Fred;
class FredBase {
private:
friend class Fred;
FredBase() { }
};
class Fred : private virtual FredBase {
public:
...
};
我試圖讓一個相同的通用模板。
#include <stdio.h>
template<typename MAKE_ME_NONINHERITABLE >
class NonInheritable{
private:
NonInheritable(){
}
friend MAKE_ME_NONINHERITABLE; //<--- error here
};
這給我一個錯誤:
xxx.cpp:11: error: a class-key must be used when declaring a friend
所以,我想:
template<typename MAKE_ME_NONINHERITABLE >
class NonInheritable{
private:
NonInheritable(){
}
friend class MAKE_ME_NONINHERITABLE; //<--- error here
};
class A : virtual public NonInheritable<A>{
};
而且我得到這個錯誤:
xxx.cpp:11: error: using typedef-name `MAKE_ME_NONINHERITABLE' after `class'
有沒有一種方法,使這項工作?
這種做法是不實現的,遺憾的是壞消息。 – Jon
您可以使用第一個變體,C++ 11(更改朋友的東西一點),但到目前爲止,似乎支持它的唯一的編譯器GCC是4.7和鐺SVN – PlasmaHH
@PlasmaHH MSVC接受它,以及 – stijn