【发布时间】:2012-10-12 00:42:21
【问题描述】:
我正在使用boost::multi_index_container 并试图让modify 操作正常工作。我的修改例程(大致)看起来像这样,使用函数内部类:
void FooContainer::modifyAttribute(string key, int newValue) {
struct ModifyFunc {
int val;
ModifyFunc(int val): val(val) {}
void operator()(Foo &f) {
foo.val = val;
}
};
StorageContainer::index<keyTag>::type &idx = mContainer.get<keyTag>();
StorageContainer::index<keyTag>::type::iterator iter = idx.find(key);
idx.modify(iter, ModifyFunc(newValue));
}
当我尝试编译这个时,我得到一个多页的编译器错误,像这样(大部分都省略了):
FooContainer.cpp:##: error: no matching function for call to [...]::modify([...]&, FooContainer::modifyAttribute(string,int)::ModifyFunc)’
这个调用有什么问题,我怎样才能让它工作?
【问题讨论】:
-
只是出于好奇:如果您将
operator()声明为const,错误消息会改变吗? -
不。问题是函数内部类被用作模板参数,这是无效的,但编译器没有很好地确定名称解析以提供有意义的错误消息。在发帖之前我自己已经想通了(因此是自我回答的问题),但我认为这是一个足够晦涩的问题链,我应该在此处发布以防其他人对此感到困惑。