0

次のような機能を探しています。

template<typename T, boost::function<T* (HandleId)> resolveFunc>
class Handle
{
public:
   T* resolve() const
   {
      return resolveFunc(_handleId);
   }

private:
   HandleId _handleId;
};

これを行う方法が見つからないようです。sizeof(Handle) == sizeof(HandleId) であることが重要なので、関数をメンバーとして格納することはできません..

誰でも助けることができますか?:)

4

1 に答える 1

0

それはすべて、によってエンコードされる情報の量に依存しますresolveFunc

たとえば、可能な関数が 5 つしかない場合は、それを 5 つの通常の関数としてエンコードでき、問題は解決します。

より多くの情報がある場合、これはコンパイル時に実行時の情報をエンコードしようとする典型的なケースです。それは失敗する運命にあります。技術的な問題を解決する 1 つの方法は、ハンドルからポインターへのマッピングである静的マップを使用することです。ただし、この場合、実際の問題は設計レベルにある可能性が非常に高いため、技術的なことを行うのは賢明ではありません。技術的には機能しますが。

于 2012-08-18T13:51:45.260 に答える