c++ - C++ 中的非成员静态模板方法定义?

标签 c++ templates linker static-methods

我可以从静态成员函数中调用非成员静态模板函数吗,其中定义被拆分为 header 和 cpp:

// zero.cpp

class Zero
{
    static void zero() { one(5); }
};

// one.h

template <typename T>
static void one(T& var);

// one.cpp

template <typename T>
void one(T& var) { }

// main.cpp

...

Zero::zero()

...

我在链接时遇到问题,我不断收到对我试图在 one.cpp 中定义的函数的 undefined reference 。

最初我认为这是由于命名空间的问题,但现在所有文件都在同一个命名空间中。我在这里做错了什么吗?

最佳答案

模板定义需要在实例化时可见。也就是说,它需要以某种方式位于标题中:

// one.hpp

template <typename T>
static void one(T& var)
{
    // definition visible in header
}

虽然我不确定您为什么希望它是静态的。

关于c++ - C++ 中的非成员静态模板方法定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005823/

相关文章:

c++ - 矩阵模板类通过常量引用传递参数

visual-studio - 正在解析LNK4098 : defaultlib 'MSVCRT' conflicts with

c++ - 运算符重载 C++ 建议

c++ - start_thread 克隆在并行程序中占用了大部分时间 - 并行化错误或报告错误?

c++ - 如果模板化的 "ResourceCache"需要不同的创建参数/方法,如何加载/创建 T 类型的资源?

c++ - 在 C++ 中使用模板元编程从函数类型中提取调用约定

android - 如何将 LD_PRELOAD 与 Android 的媒体服务器一起使用?

c++ - Visual Studio 2010 链接器查找多重定义的符号(在不应该的地方)

c++ - strlen() 编译时优化

c++ - 在任意数据类型上使用 <algorithm> 库