- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用具有 A* 寻路算法的库 (libtcod)。我的类继承了回调基类,我实现了需要的回调函数。这是我的通用示例:
class MyClass : public ITCODPathCallback
{
...
public: // The callback function
float getWalkCost(int xFrom, int yFrom, int xTo, int yTo, void *userData ) const
{
return this->doSomeMath();
};
float doSomeMath() { // non-const stuff }
};
我找到了很多使用 const_cast 和 static_cast 的示例,但它们似乎是相反的,使非 const 函数能够返回 const 函数结果。在这个例子中我该怎么做?
getWalkCost() 由我的库定义,我无法更改,但我希望能够在其中执行非常量操作。
最佳答案
最佳解决方案取决于您为什么要执行非常量操作。例如,如果您有一个要用于提高性能的结果缓存,那么您可以使缓存可变,因为这样可以保留逻辑常量:
class MyClass : public ITCODPathCallback
{
...
public: // The callback function
float getWalkCost(int xFrom, int yFrom, int xTo, int yTo, void *userData ) const
{
return this->doSomeMath();
};
float doSomeMath() const { // ok to modify cache here }
mutable std::map<int,int> cache;
};
或者您可能想记录一些关于调用 getWalkCost 的次数以及最大 x 值是多少的统计数据,然后传递对统计数据的引用可能是最好的:
class MyClass : public ITCODPathCallback
{
...
public:
struct WalkStatistics {
int number_of_calls;
int max_x_value;
WalkStatistics() : number_of_calls(0), max_x_value(0) { }
};
MyClass(WalkStatistics &walk_statistics)
: walk_statistics(walk_statistics)
{
}
// The callback function
float getWalkCost(int xFrom, int yFrom, int xTo, int yTo, void *userData ) const
{
return this->doSomeMath();
};
float doSomeMath() const { // ok to modify walk_statistics members here }
WalkStatistics &walk_statistics;
};
关于c++ - 重铸 const 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16148841/
我正在尝试创建一个简单的国际象棋程序,但在实现典当推广时遇到了一些小问题。我有一个抽象类 Piece 和扩展它的 6 个类(King、Queen、Rook、Knight、Bishop 和 Pawn)。
这个问题在这里已经有了答案: Convert data from long format to wide format with multiple measure columns (5 个回答) 3年
我正在使用具有 A* 寻路算法的库 (libtcod)。我的类继承了回调基类,我实现了需要的回调函数。这是我的通用示例: class MyClass : public ITCODPathCallbac
在配置重铸机器人时,有没有办法设置一个操作来重置除特定字段之外的所有内存? 我已经尝试取消设置除我需要的字段之外的所有字段,但它很无聊、不可扩展、不可扩展且不可维护。 谢谢 最佳答案 您应该在 Rec
我希望我的 recast.bot 回复用户的回复。这是代码,但我收到以下错误消息。如何解决这个问题? Bot Server is running on port 5002 TypeError: Can
我是一名优秀的程序员,十分优秀!