我正在编写一个TMP,使用可变参数模板计算传递给struct
的元素数作为模板参数。这是我的代码:
template<class T, T... t>
struct count;
template<class T, T h, T... t>
struct count<T, h, t...>{
static const int value = 1 + count<T, t...>::value;
};
template<class T>
struct count<T>{
static const int value = 0;
};
template<>
struct count<std::string, std::string h, std::string... l>{
static const int value = 1 + count<std::string, l...>::value;
};
template<>
struct count<std::string>{
static const int value = 0;
};
int main(){
std::cout << count<int, 10,22,33,44,56>::value << '\n';
std::cout << count<bool, true, false>::value << '\n';
std::cout << count<std::string, "some">::value << '\n';
return 0;
}
我在使用count
的{{1}}的第三次实例化时收到错误,因为std::string
告诉我g++ 4.7
。对此有何解决方法?
答案 0 :(得分:2)
问题不是std::string
类型,而是通话中的文字"some"
std::cout << count<std::string, "some">::value << '\n';
不幸的是,无法将字符串或浮点字面值传递给模板,因为它也是in this answer或in that one。
答案 1 :(得分:1)
很抱歉让你失望,但没有办法解决这个问题。非类型模板参数只能是基本类型,例如:
std::string
或其他类型根本无法在那里工作。