我如何为参数列表中的类型专门化模板函数
How can I specialize template function for a type in Parameter lists
我的代码片段如下...
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' 相同时调用 'class A' 的函数。
key_type 可以是 char、int 和 'class A'。
class A 有自己的函数 'special_function_in_A' 而 int 或 char 没有。它会导致编译错误。我该如何解决?
谢谢 :D
使用标记调度。呼叫站点将如下所示:
~~ 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);
}
我的代码片段如下...
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' 相同时调用 'class A' 的函数。 key_type 可以是 char、int 和 'class A'。 class A 有自己的函数 'special_function_in_A' 而 int 或 char 没有。它会导致编译错误。我该如何解决?
谢谢 :D
使用标记调度。呼叫站点将如下所示:
~~ 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);
}