如何为参数列表中的类型专门化模板功能

时间:2015-02-02 18:31:16

标签: c++ templates

我的代码段如下......

struct ParameterLists1 {
 typedef int key_type;
 typedef char value_type;
}

class A { ~~ };

struct ParameterLists2 {
 typedef A key_type;
 typedef int value_type;
}

template<P>
class Mine {
 typedef typename P::key_type key_type;
 typedef typename P::value_type value_type;

 void foo(key_type k, value_type v) {
       ~~ do something ~~
   if key_type is 'class A'
       key.special_function_in_A (k);
 }
 private:
   key_type key;
   value_type val;
}

只有当key_type与'class A'相同时,我才想调用'A类'的函数。 key_type可以是char,int和'class A'。 A类有自己的函数'special_function_in_A',int或char没有。它使编译错误。我该如何解决?

谢谢:D

1 个答案:

答案 0 :(得分:1)

使用tag-dispatching。呼叫站点看起来像这样:

~~ do something ~~
do_something_else(key, k, std::is_same<key_type, A>());

do_something_else定义为:

template<typename T>
void do_something_else(key_type&, key_type&, std::false_type) { }

template<typename T>
void do_something_else(key_type& key, key_type& k, std::true_type)
{
    key.special_function_in_A(k);
}