我正在尝试编写一个小型库,我需要强制执行特定的模板专业化。假设我有一个带有两个模板参数的抽象类analyze-string
。我还有另一个(抽象)类,它由Abstract<S,T>
参数化,如Abstract<S,T>
中所示。我想定义Other<U, V, Abstract<S,T>>
,以便另一个virtual void Other<U, V, Abstract<S,T>>::operator()(U, V, Abstract<S,T>&) = 0;
(具体)类可以Another<S,T,U> : public Other<S,T,U>
override
来引用抽象对象。这样,我就可以创建新类型,可以使用它在operator()
中收到的任何Concrete<S,T> : public Abstract<S,T>
对象的继承机制。
我不是一个优秀的软件架构师。下面是我认为可以强制实施上述机制的小代码摘录。我已经在不同的论坛上阅读了这个问题,并且已经意识到这可以使用operator()
type_traits
来解决(也许是SFINAE类型的解决方案,我不知道)。< / p>
如果您能告诉我如何实施这样的机制,我将不胜感激。或者,更好的是,如果需要,我的问题的另一种方法(即,不同的设计模式解决方案)。
C++11
以上解决方案提供了一种强制执行我想要的机制;但是,编译器无法向最终用户提供信息性错误消息。我想有这么好的错误机制。如果您指出与上述解决方案相关的可能缺陷/问题,我将不胜感激。