相关疑难解决方法(0)

为什么模板只能在头文件中实现?

引自C++标准库:教程和手册:

目前使用模板的唯一可移植方法是使用内联函数在头文件中实现它们.

为什么是这样?

(澄清:头文件不是唯一的便携式解决方案.但它们是最方便的便携式解决方案.)

c++ templates c++-faq

1660
推荐指数
14
解决办法
46万
查看次数

在可变参数模板函数中连接字符串(和数字)

我正在尝试编写一个函数,它接受各种字符串或数字(与std::to_string它们一起使用并连接它们.我只使用它来处理字符串,但是我在根据输入作为字符串或数字进行特殊处理时遇到了麻烦.

我的代码被调用如下:

stringer("hello", "world", 2, 15, 0.2014, "goodbye", "world")

这就是我所拥有的:

inline std::string stringer(const std::string &string)
{
    return string;
}

template <typename T, typename... Args>
inline std::string stringer(const std::string &string, T &&val, Args &&...args)
{  
    return stringer(string+std::to_string(val), std::forward<Args>(args)...);
}

template <typename... Args>
inline std::string stringer(const std::string &string, Args &&...args)
{
    return stringer(string, std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)

目前它正在打破任何多个字符串添加,除非以下是所有数字(由于to_string).如何根据字符串或数字进行专门化以完成上述工作?谢谢.

c++ variadic-functions variadic-templates c++11

13
推荐指数
4
解决办法
7497
查看次数

C++中的内联函数

Hii,

我是C++的新手.我确实阅读过有关内联函数的内容并正确理解它们.但是这个站点说"如果我们在一个.cpp文件中写入内联函数的定义并从另一个文件调用它,我们得到一个'未解决的外部'错误....为什么会这样......?这可以做到正常功能正确...如果我错了请纠正我...

谢谢

c++

5
推荐指数
1
解决办法
1492
查看次数

模板实例化如何不会导致链接错误

我知道以下代码会导致链接错误:

//first.cpp
void test(){
    //random code
}

//second.cpp
void test(){
    //random code
}
Run Code Online (Sandbox Code Playgroud)

所以让我们说我们有这个函数模板:

template<typename T>
T test(){
    //random code
}
Run Code Online (Sandbox Code Playgroud)

并且正在这样做:

//first.cpp
...
test<void>();

//second.cpp
...
test<void>();
Run Code Online (Sandbox Code Playgroud)

所以我理解编译器如何工作的方式是它只关心每个文件,所以它只关心test<void>()必须有一个定义,因此它会创建一个。同样的事情也适用,second.cpp那么为什么我们在后期有两个定义时不会收到链接器错误test<void>。 (我认为这应该与第一个示例相同,其中两个void test()函数在单独的文件中导致链接错误)

如果这是重复的我很抱歉我真的不知道如何搜索这个。

c++ templates

5
推荐指数
1
解决办法
99
查看次数