有人能告訴我爲什麼我在下面代碼的最後一行出現編譯器錯誤?Boost:使用apply_visitor比較變體
注:如果我刪除以下行,我的代碼被沒有錯誤編譯:
appliedEqualityVisitor(compareValue);
下面是代碼:
#include "boost/variant/variant.hpp"
#include "boost/variant/apply_visitor.hpp"
using namespace std;
using namespace boost;
template<typename T>
struct CheckOneTypeEquality : public boost::static_visitor<>
{
T const* value;
bool operator()(T const& other) const
{
return other == *value;
}
template<typename U>
bool operator()(U const& other) const
{
return false;
}
CheckOneTypeEquality(T const& value_):value(&value_) {}
};
typedef variant<int, string> MyVariant;
typedef apply_visitor_delayed_t<CheckOneTypeEquality<MyVariant>> AppliedEqualityVisitorType;
int main(int argc, char **argv)
{
int testValue = 12;
CheckOneTypeEquality<MyVariant> equalityVisitor(testValue);
AppliedEqualityVisitorType appliedEqualityVisitor = apply_visitor(equalityVisitor);
MyVariant compareValue = 13;
appliedEqualityVisitor(compareValue); // <<<<< compile error here
return 0;
}
發生時錯誤的升壓例子嗎? –
@Meysam boost :: variant提供'operator ==',因此可以使用'operator =='比較同一個變體的兩個實例,前提是每個有界類型都符合EqualityComparable概念 – mark
@mark你是對的。我有點誤導了! – Meysam