gpt4 book ai didi

c++ - 将模板化实现分配给先前声明的函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:31:50 24 4
gpt4 key购买 nike

我有一个 .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文件要么是因为这个函数很重,我不想在每个使用我的头文件的源文件中重新编译它。

最佳答案

您只需要声明 ab匹配定义,因此将它们声明为 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>;

See it live

你可能想禁止 ab不被修改,并将它们声明为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com