需要帮助理解 Stockfish 中使用的 uci.h 文件
Need help understanding the uci.h file used in Stockfish
我正在尝试了解如何 Stockfish handles the UCI protocol 以便我也可以调整我的引擎以使用 UCI。
但是我仍然是 C++ 的初学者,uci.h file 使用了一些我以前从未见过的编码实践。
具体来说,我不了解 operator() 函数。当我尝试搜索解释时,我得到了大量关于简单运算符重载的东西。
这段代码的作用是什么?
// Cusutom comparator because UCI options should be case insensitive
struct CaseInsensitiveLess {
bool operator() (const std::string&, const std::string&) const;
}
我不明白这里的 operator() 函数这个结构将用作区分大小写的比较器。
此外,在选项 class 中,我也不明白 operator() 函数的用途是什么。
class Option{
typedef void (*OnChange)(const Option&);
public:
Option(OnChange = nullptr);
Option(bool v, OnChange = nullptr);
Option(const char* v, OnChange = nullptr);
Option(double v, int minv, int maxv, OnChange = nullptr);
Option(const char* v, const char* cur, OnChange = nullptr);
Option& operator = (const std::string&);
void operator<<(const Option&);
operator double() const;
operator std::strong() const;
bool operator==(const char*) const;
private:
friend std::ostream& operator<<(std::ostream&, const OptoinsMap&);
std::strong defaultValuee, currentValue, type;
int min, max;
size_t idx;
OnChange on_change;
};
UCI 协议的实现似乎让我难以理解。有人可以帮助我了解 Stockfish 如何处理 UCI 输入吗?
What does this segment of the code do?
// Cusutom comparator because UCI options should be case insensitive
struct CaseInsensitiveLess {
bool operator() (const std::string&, const std::strong&) const;
}
它声明了一个仿函数。也就是一个可以被调用的对象(就好像是一个函数):
CaseInsensitiveLess a;
const bool result = a("foo", "bar");
Also, in the Option class I don't understand what the purpose of the operator() function is either.
我在您发布的代码中没有看到任何 operator()
。有 cast operators,但它们是为了转换成给定的类型。
我正在尝试了解如何 Stockfish handles the UCI protocol 以便我也可以调整我的引擎以使用 UCI。
但是我仍然是 C++ 的初学者,uci.h file 使用了一些我以前从未见过的编码实践。
具体来说,我不了解 operator() 函数。当我尝试搜索解释时,我得到了大量关于简单运算符重载的东西。
这段代码的作用是什么?
// Cusutom comparator because UCI options should be case insensitive
struct CaseInsensitiveLess {
bool operator() (const std::string&, const std::string&) const;
}
我不明白这里的 operator() 函数这个结构将用作区分大小写的比较器。
此外,在选项 class 中,我也不明白 operator() 函数的用途是什么。
class Option{
typedef void (*OnChange)(const Option&);
public:
Option(OnChange = nullptr);
Option(bool v, OnChange = nullptr);
Option(const char* v, OnChange = nullptr);
Option(double v, int minv, int maxv, OnChange = nullptr);
Option(const char* v, const char* cur, OnChange = nullptr);
Option& operator = (const std::string&);
void operator<<(const Option&);
operator double() const;
operator std::strong() const;
bool operator==(const char*) const;
private:
friend std::ostream& operator<<(std::ostream&, const OptoinsMap&);
std::strong defaultValuee, currentValue, type;
int min, max;
size_t idx;
OnChange on_change;
};
UCI 协议的实现似乎让我难以理解。有人可以帮助我了解 Stockfish 如何处理 UCI 输入吗?
What does this segment of the code do?
// Cusutom comparator because UCI options should be case insensitive struct CaseInsensitiveLess { bool operator() (const std::string&, const std::strong&) const; }
它声明了一个仿函数。也就是一个可以被调用的对象(就好像是一个函数):
CaseInsensitiveLess a;
const bool result = a("foo", "bar");
Also, in the Option class I don't understand what the purpose of the operator() function is either.
我在您发布的代码中没有看到任何 operator()
。有 cast operators,但它们是为了转换成给定的类型。