- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 .h
包含 2 个不同函数声明的文件:
#ifdef MY_HEADER
#define MY_HEADER
void a();
void b();
#endif
现在进入.cpp
文件我想将这些函数实现为另一个模板函数的不同实例:
#include "my_header.h"
namespace {
template<size_t N>
void c()
{
...
}
}
void (*a)() = c<42>;
void (*b)() = c<265>;
我收到一条错误消息 error: 'void (* a)()' redeclared as different kind of symbol
.我也试过 a = c<42>
和 auto a = c<42>
没有运气。
我知道我可以这样做:
void a() {c<42>();}
void b() {c<265>();}
我几乎可以肯定编译器会为我优化这个额外的函数调用,但我想知道是否有更好的方法来声明它。我不想放c
函数本身变成.h
文件要么是因为这个函数很重,我不想在每个使用我的头文件的源文件中重新编译它。
最佳答案
您只需要声明 a
和 b
匹配定义,因此将它们声明为 void(*)()
变量,而不是 void()
功能。
建议的其他答案std::function<void()>
忽略了它是一个非常重量级的选项。
my_header.h
#ifdef MY_HEADER
#define MY_HEADER
extern void (*a)();
extern void (*b)();
#endif
我的实现.cpp
#include "my_header.h"
namespace {
template<size_t N>
void c()
{
...
}
}
void (*a)() = c<42>;
void (*b)() = c<265>;
你可能想禁止 a
和 b
不被修改,并将它们声明为 void (* const)()
,即(常量指针)到(函数)。
extern void (* const a)();
...
void (* const a)() = c<42>;
...
// a = c<53>; // error: assignment of read-only variable 'a'
关于c++ - 将模板化实现分配给先前声明的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49445756/
我的应用将 SceneKit 内容的“页面”与图像和文本交替。当我从图像页面前进到新的 SceneKit 页面时,前一个 SceneKit 页面中的内容会短暂显示,然后被新内容替换。时髦。 我只使用一
我正在尝试处理(在 C# 中)包含一些数字数据的大型数据文件。给定一个整数数组,如何对其进行拆分/分组,以便如果下一个 n(两个或更多)是负数,则前一个 n 元素被分组。例如,在下面的数组中,应该使用
刚接触promises,研究过。所以我的代码和我的理解: sql.connect(config).then(function(connection) { return connection.req
目前我在 if (roobaf) block 中有一些代码,这取决于 foo 和 bar 是否为假。我可以在 block 内再次检查这些条件,但感觉像是不必要的代码重复。 if (foo) {
我是一名优秀的程序员,十分优秀!