私はCPPクイズで質問を見つけました。問題はC++でプライベートネストされたクラスにアクセスするには?
class secret
{
class hidden{};
public:
template <class K>
string accept(K k) {return (k(*this, hidden()));}
string keyToNextLvl (hidden)const {return ("success!"); }
};
struct SampleSoln
{
template <class pwd>
string operator()(const secret &sc, pwd opwd) const
{ return (sc.keyToNextLvl(opwd)); }
};
int main()
{
secret sc;
cout <<sc.accept(SampleSoln()) << endl; //Prints success
cout <<sc.keyToNextLvl (AnswerKey()) << endl; //Need to provide the implementation of AnswerKey
}
です。これで、メソッド "keyToNextLvl"を直接使用してアクセスする必要があります。 (私はacceptメソッドにアクセスすることは許されていません - サンプルソリューションは、acceptメソッドを使用してkeyToNextLvlにアクセスするために提供されています)。友人を使わずにプライベートメンバー/メソッドにアクセスする http://bloglitb.blogspot.in/2010/07/access-to-private-members-thats-easy.html
しかし、私は上記の解決策については何も考えていませんでした。一例として、
sc.keyToNextLvl ({})
:それについては
を構築するテンプレート変換演算子を使用していますか? –
質問にある通りそのまま – vu1p3n0x
ああ、今すぐ手に入れます。最初は 'operator()'をオーバーロードしたと思っていましたが、変換演算子であることが分かりました( 'T operator()'と 'operator T()'の小さな違い)。ニート! –