gpt4 book ai didi

c++ - 在尚未从模板中声明的命名空间中使用函数

转载 作者:行者123 更新时间:2023-11-28 01:16:38 25 4
gpt4 key购买 nike

当同时使用 clang 和 gcc 时,以下代码给我一个错误,即 'print2' 不是 'N' 的成员:

#include <stdio.h>

struct Printer
{
template<class T>
void print(T t)
{
N::print2(*this, t);
}
};

namespace N
{
void print2(Printer& p, int v)
{
printf("%d\n", v);
}
}

int main()
{
Printer p;
p.print(1);
}

如果我删除 namespace N 并将 print2 函数设置为全局函数,它就可以工作。为什么将函数放入命名空间和不放入命名空间时,查找会有所不同?不幸的是,我无法在 struct Printer 之前移动 print2 函数,这本来是显而易见的解决方案。

最佳答案

这里我只是简单的在Printer之前声明了函数,之后定义了函数的逻辑。

#include <stdio.h>

namespace N {
void print2(int);
}

struct Printer
{
template<class T>
void print(T t)
{
N::print2(t);
}
};

namespace N
{
void print2(int v)
{
printf("%d\n", v);
}
}

int main()
{
Printer p;
p.print(1);
}

关于c++ - 在尚未从模板中声明的命名空间中使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58487525/

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