我有这两个功能:
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
我也会遇到问题。
答案 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;
}