C++クラステンプレートがあるとしましょう。
template <class _T>
class MyClass
{
public:
int func();
private:
_T internal;
};
このテンプレートにブール値を指定して、trueの場合、このテンプレートのすべてのメンバーを公開する方法が必要です。
例えば:
MyClass<SomeClass, false> c1;
c1.internal.someFunc(); // ERROR
MyClass<SomeOtherClass, true> c2;
c2.internal.someFunc(); // SUCCESS
不思議に思う人のために、私はgtestとgmockを使用して具体的なクラスをモックアップしています。したがって、ユニットテストの1つで、次のようになります。
TEST(MyClass, Test1) {
MyClass<SomeMockClass, true> c1;
EXPECT_CALL(c1.internal, someFunc()).Times(1);
}
このテストテンプレートでは、コードから内部にアクセスできる必要があります。本番環境では、それをユーザーから隠したいと思います。
私はmsvc11(Visual Studio 2012)を使用しているので、いくつかのC++11機能とメタプログラミング構造にアクセスできます。