模板和const类型?

时间:2017-05-15 16:14:23

标签: c++ c++11 templates

我有这两个功能:

template <typename T>
void Cache<T>::Setup(const std::vector<std::string> &v){
    Setup(v, v);
}

template <typename T>
void Cache<T>::Setup(const std::vector<std::string> &v, const std::vector<T> &values){
...
}

这应该适用T=std::string,但如果T= const std::string则不行。

我该如何解决这个问题?特别是因为vector<cost std::string>不被允许,即使这是可能的,如果T=std::string我也会遇到问题。

1 个答案:

答案 0 :(得分:0)

使用SFINAE?

#include <iostream>
#include <type_traits>

template <typename T>
typename std::enable_if<false == std::is_same<T, T const>::value>::type
      foo (T & t)
 { std::cout << "not const T: " << t << std::endl; }

template <typename T>
typename std::enable_if<true == std::is_same<T, T const>::value>::type
      foo (T & t)
 { std::cout << "const T: " << t << std::endl; }

int main()
 {
   std::string        a {"abc"};
   std::string const  x {"xyz"};

   foo(a); // print not const T: abc (error if you delete the first foo())
   foo(x); // print const T: xyx (error if you delete the second foo())

   return 0;
 }