我正在编写一个Clang Checker,其中ProgramMap State的键必须是std :: string。
到目前为止,我看到的大多数示例都使用SymbolRef作为键。
这是我在做什么。
REGISTER_MAP_WITH_PROGRAMSTATE(TrackVar, std::string, RefState)
我的RefState在哪里
struct RefState {
private:
enum Kind { Synchronized, Unsynchronized } K;
RefState(Kind InK) : K(InK) { }
public:
bool isSynchronized() const { return K == Synchronized; }
bool isUnSynchronized() const { return K == Unsynchronized; }
static RefState getSynchronized() { return RefState(Synchronized); }
static RefState getUnsynchronized() { return RefState(Unsynchronized); }
bool operator==(const RefState &X) const {
return K == X.K;
}
void Profile(llvm::FoldingSetNodeID &ID) const {
ID.Add(K);
}
};
但是在构建期间出现错误。
llvm/ADT/FoldingSet.h:223:5: error: 'const class std::basic_string<char>' has no member named 'Profile'.
所以我想知道字符串是否支持作为键?如果没有,我应该使用普通的std :: map吗?
感谢任何帮助。