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 个普通函数,问题就解决了。

如果有更多信息,那么这是尝试在编译时对运行时信息进行编码的经典案例;那注定要失败。解决技术问题的一种方法是使用静态映射,从句柄映射到指针。但是:在这种情况下,真正的问题很可能出在设计层面,所以做技术是不明智的。即使它在技术上有效。

于 2012-08-18T13:51:45.260 回答