【发布时间】:2012-03-07 15:12:43
【问题描述】:
我有一个 stl::list 元组,我想使用 std::find_if 在每个元组中使用多种类型比较来搜索元素。我可以将元组类型与特定的模板化 get() 函数相关联吗?因此不需要将字段编号传递给谓词模板。
我创建了一个这样的谓词:
template<typename T, size_t field>
struct obj_predicate : public std::unary_function<ObjectRecordType, bool>
{
const T* comparisonObject;
obj_predicate(const T& cObj) : comparisonObject(&cObj) {}
bool operator()(const ObjectRecordType& obj) const
{
return *comparisonObject == std::tr1::get<field>(obj);
}
};
我想要的是 obj_predicate<int>(3) 知道 int 在元组中的位置。
【问题讨论】:
-
不是真的,但如果你知道解决方案,为什么不呢。
-
你不喜欢你当前的实现吗?
-
我有一个工厂,它通过不同类型的值创建实例。这种设计要求我重载
createInstance方法,并使用不同的字段编号和值调用 find_if (可以在createInstance中使用模板类型名声明)。
标签: c++ stl tuples tr1 template-meta-programming