問題はほとんどすべてですが、テンプレートクラスで不透明な ptr を使用してカプセル化を取得する方法はありますか? (コンパイラはコンパイル時にすべてを認識している必要があるため、私の直感は「いいえ」です)
MyClass は静的ライブラリを介して公開する必要があり、MyClassImp は隠されている、このようなものです。
//MyClass.h
template <typename T> MyClassImp;
template <typename T> MyClass
{
public:
MyClass();
void Foo();
private:
MyClassImp<T>* impl;
}
//MyClassImp.h
template <typename T> MyClassImp
{
public:
MyClassImp() {}
void Foo() {/*proprietary/complex stuff I want to hide*/}
}
//MyClass.cpp
template <typename T>
MyClass::MyClass()
{
impl = new MyClassImp();
}
template <typename T>
void MyClass::Foo() { impl->Foo(); }
.cpp ファイルに隠されている MyClass::Foo は、MyClassImp の定義を含めないと公開できないため、これは機能しません。そのため、関数が見つからないというエラーが発生します。