1

我有以下情况。

template <class T>
class Foo {

    template <class V>
    int bar();

};

(我正在使用 swig 将此类移植到 python,以澄清)我遇到的问题是因为实际的模板参数 T 和 V 是相关的,即Foo<T1>应该有bar<V1>Foo<T2>应该有bar<V2>等等。但是,我处于 ​​swig(或 C++ 编译器)假装定义了所有可能的组合的情况,即,Foo<T1>::bar<V1>等等。这意味着我必须提供 Tn * Vn 方法,其中大多数会引发异常,但对角线组合 Ti/Vi 除外Foo<T1>::bar<V2>Foo<T2>::bar<V1>

有没有办法以一种聪明的方式防止这种情况发生,还是我应该尘埃落定并实施所有组合?如果您认为我有设计问题,您将如何解决?

4

1 回答 1

4

如果Ts和Vs之间存在1-1映射,为什么bar需要模板?您可以创建一个特征类来确定正确的V,如下所示:

template <typename T>
struct Match_T_V;

template <>
struct Match_T_V<T1> {
  typedef V1 type;
};

template <>
struct Match_T_V<T2> {
  typedef V2 type;
};

//etc. for other Ts


template <typename T>
class Foo {
  typedef typename Match_T_V<T>::type V;

  int bar();  //use V, guaranteed to be the correct one
};
于 2013-05-01T08:15:20.757 回答