我想创建一个非静态方法,只有类(或其子类之一)的同一实例的构造函数才能调用。除了面向密钥的访问保护模式之外,是否有一种优雅的方法可以做到这一点?
class MyClass
{
public:
void foo()
{
assert(foo was called from the constructor); //how?!
if (some condition or other)
throw ExceptionThatOnlyClientsThatConstructTheObjectCanHandle(); //hence my requirement
}
};
class MySubClass : public MyClass
{
public:
MySubClass()
{
blah(); //correct use of foo() through blah()
foo(); //correct use of foo() directly
}
void blah() { foo(); } //correctness depends on who called blah()
};
int main()
{
MySubClass m;
m.foo(); // incorrect use of foo()
m.blah(); // incorrect use of foo() through blah()
return 0;
}
编辑:请参阅下面的评论,但我认为这是(1)面向传递键的访问控制或(2)确保处理异常的特殊情况。这么看,constructor 的事情就是一个红鲱鱼。