获取模板函数类型

Get template function type

本文关键字:类型 函数 获取      更新时间:2023-10-16

我是C++中使用模板的新手,我想根据<>之间使用的类型做不同的事情,所以function<int>()function<char>()不会做相同的事情。我怎样才能做到这一点?

template<typename T> T* function()
{
    if(/*T is int*/)
    {
        //...
    }
    if(/*T is char*/)
    {
        //...
    }
    return 0;
}

您想要使用函数模板的显式专业化:

template<class T> T* function() {
};
template<> int* function<int>() {
    // your int* function code here
};
template<> char* function<char>() {
    // your char* function code here
};

创建模板专业化

template<typename T> T* function()
{
 //general case general code
}
template<> int* function<int>()
{
  //specialization for int case.
}
template<> char* function<char>()
{
  //specialization for char case.
}

最佳实践涉及标记调度,因为专业化很棘手。

标签调度更容易使用:

template<typename T>
T* only_if_int( std::true_type is_int )
{
  // code for T is int.
  // pass other variables that need to be changed/read above
}
T* only_if_int( std::false_type ) {return nullptr;}
template<typename T>
T* only_if_char( std::true_type is_char )
{
  // code for T is char.
  // pass other variables that need to be changed/read above
}
T* only_if_char( std::false_type ) {return nullptr;}
template<typename T> T* function()
{
  T* retval = only_if_int( std::is_same<T, int>() );
  if (retval) return retval;
  retval = only_if_char( std::is_same<T, char>() );
  return retval;
}
template<class T>
T Add(T n1, T n2)
{
    T result;
    result = n1 + n2;
    return result;
}

要详细了解模板,请访问以下链接:http://www.codeproject.com/Articles/257589/An-Idiots-Guide-to-Cplusplus-Templates-Part-1

您可以定义重载函数,如下所示:

#define INTT  0
#define CHARR 1
template<typename T>
T* function()
{
int type;
type = findtype(T);
//do remaining things based on the return type
}
int findType(int a)
{
return INTT;
}
int findType(char a)
{
return CHARR;
}