我有以下代碼,其中Boost.Local使用函數回調來加載mo文件。該函數對我來說叫做findMo,我試圖將它綁定到一個對象上,這樣我就可以保留我放在moFinder的私有成員中的副作用。Boost.Bind非靜態成員
class moFinder
{
public:
moFinder(string const& wantedFormat)
: format(wantedFormat)
{
// ...
}
std::vector<char> findMo(std::string const& filePath, std::string const& encoding)
{
// ...
}
};
std::locale createLocale(string const& name, string const& customTranslation,
string const& path, string const& domain, string const& pathFormat)
{
// ...
namespace blg = boost::locale::gnu_gettext;
blg::messages_info info;
info.paths.push_back(path);
info.domains.push_back(blg::messages_info::domain(domain));
moFinder finder(pathFormat);
blg::messages_info::callback_type callbackFunc;
callbackFunc = boost::bind(moFinder::findMo, boost::ref(finder));
info.callback = callbackFunc;
// ...
}
編譯時,我得到以下錯誤:
error: invalid use of non-static member function ‘std::vector moFinder::findMo(const std::string&, const std::string&)’
在那裏我打電話的boost ::綁定就行了。
我在做什麼值得這個錯誤?
儘量減少您的問題,以較小的樣本。這裏沒有什麼與'boost.locale'有關的。它純粹是「綁定」。這使得診斷更容易。 – pmr 2012-04-01 13:06:31
我通常會這樣做,但我真的不確定它是否與Boost.Locale怪異有關。 – Jookia 2012-04-01 13:19:22