しかしHelper
のHelper
クラスの友人をされていないのですか?
#include <iostream>
using namespace std;
template<typename Fun, typename Arg>
class TestBuilder
{
int n;
char c;
public:
template<typename Int>
class Helper
{
public:
void print(TestBuilder& tb) {
std::cout << tb.n << " " << tb.c << std::endl;
}
};
TestBuilder(int n, char c) : n(n), c(c) {}
};
int main() {
TestBuilder<int, int> tb(5, 'p');
TestBuilder<int, int>::Helper<int> h;
h.print(tb);
return 0;
}
出力は以下となります:
C02QT2UBFVH6-lm:~ gsamaras$ pico main.cpp
C02QT2UBFVH6-lm:~ gsamaras$ g++ -Wall main.cpp
C02QT2UBFVH6-lm:~ gsamaras$ ./a.out
5 p
:)結果
は、それは、例を確認し、外側のクラスのメンバー(はい、そのプライベートメンバー)へのアクセス権を持っています
しかし、別のクラス(ネストされたクラスではなく、別のクラス)を追加すると、プライベートメンバーTestBuilder
にはアクセスできません(もちろん!
0123)。
class alienClass
{
public:
/*
That won't work, you will get:
error: 'n' is a private member of 'TestBuilder<int, int>'
error: 'c' is a private member of 'TestBuilder<int, int>'
*/
void print(TestBuilder<int, int>& tb) {
std::cout << tb.n << " " << tb.c << std::endl;
}
};
HelperはTestBuilder内にネストされていますが、既にTestBuilderオブジェクトのプライベートメンバーにフルアクセスできます。 – Davidbrcz