1
我有一個使用對象的日期字段來確定地圖順序的地圖。爲此,我使用lambda表達式來處理比較。這工作正常,但我得到一個警告說warning: ‘Foo’ has a field ‘Foo::m_date_map’ whose type uses the anonymous namespace
這個問題似乎是在我的別名的事實。我在一個答案中看到,解決方法是命名匿名類型,但我不知道該怎麼做。在地圖中使用lambda作爲比較器時的匿名類型警告
//In Foo.h
static constexpr auto compare_by_date = [](const date_key* lhs, const date_key* rhs) {
return std::tie(lhs->year, lhs->month, lhs->day) < std::tie(rhs->year, rhs->month, rhs->day);
};
class Foo {
using ValueMap = std::map<double, date_key* const>;
using DateMap = std::map<date_key* const, ValueMap *, decltype(compare_by_date)>;
DateMap * m_date_map;
Foo();
}
//In Foo.cpp
Foo::Foo() : m_date_map(new DateMap(compare_by_date) {
// Do something
}
我應該如何去擺脫警告?
這擺脫了警告,但有趣的是,聲明不再是一個constexpr,因爲變量'不是字面的,因爲它有一個非平凡的析構函數'。我不確定我完全掌握了這個錯誤,但是失去了constexpr的幫助。 – jterm