gpt4 book ai didi

c++ - header 中的模板显式实例化

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:05 24 4
gpt4 key购买 nike

我知道可以在 header 中声明一个模板,并在源文件中声明它的定义,只要我提前声明将用于实例化的参数即可。我的问题是:将显式实例化放在 .h 文件中会产生问题吗?它似乎有效,但我一直看到人们将它们放在源文件中,而不是 .h

我想到的是以下内容

.h文件

class foo
{
public:
template <typename T>
void do(const T& t);
};

template<> void foo::do<int>(const int&);
template<> void foo::do<std::string>(const std::string&);

.cpp文件

template <int>
void foo::do(const int& t)
{
// Do something with t
}

template <std::string>
void foo::do(const std::string& t)
{
// Do something with t
}

最佳答案

这些被称为显式特化。显式实例化是另一回事。

将这些声明放在头文件中很好,而且是个好主意。编译其他源文件时,您希望编译器知道不要使用主模板生成这些特化。

不过,您在 *.cpp 文件中的语法是错误的。定义应该更像声明:

template <>
void foo::do<int>(const int& t)
{
// Do something with t
}

关于c++ - header 中的模板显式实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24145632/

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