【发布时间】:2011-04-11 20:01:31
【问题描述】:
这就是我现在拥有的:
template<template<typename T> class container, typename T>
inline bool contains( const container<T> &cont, const T &element )
{
if( cont.size() == 0 )
return false;
return( std::find(cont.begin(), cont.end(), element) != cont.end() );
}
我想这样称呼它:
std::vector<string> stringvector;
contains( stringvector, "somestring" );
我相信这应该是可能的,但我尝试过的一切都会引发不同的错误。任何帮助表示赞赏。谢谢!
更新:感谢所有答案,我看得太远了,但我仍然遇到问题:
template<class container_type, typename T>
inline bool contains(const container_type& c, const T& e)
{
return !(c.size() && std::find(c.begin(),c.end(),e)!=c.end());
}
int main(int argc, char *argv[])
{
vector<string> stringvector;
stringvector.push_back("hello");
cout << contains( stringvector, string("hello") );
return 0;
}
编译失败,即使没有显式的 `string´ 构造函数:
error: no matching function for call to 'find(std::vector<std::basic_string<char> >::const_iterator, std::vector<std::basic_string<char> >::const_iterator, const std::basic_string<char>&)'
【问题讨论】:
-
你能举出错误信息的例子,以免每个人都不得不编写一个(非)可编译的例子并自己尝试吗?