没有参考书,任何人都可以CRTP用代码示例提供一个很好的解释吗?
几个星期休息之后,我正在尝试使用David Vandevoorde和Nicolai M. Josuttis 所着的模板 - 完整指南来扩展和扩展我的模板知识,我现在想要了解的是模板的显式实例化.
我实际上并没有这样的机制问题,但我无法想象我想要或想要使用此功能的情况.如果有人能向我解释,我将不仅仅是感激.
在C++ Primer Plus(2001,捷克语翻译)中,我发现了这些不同的模板特化语法:
功能模板
template <typename T> void foo(T);
Run Code Online (Sandbox Code Playgroud)
专业化语法
void foo(int param); // 1
void foo<int>(int param); // 2
template <> void foo<int>(int param); // 3
template <> void foo(int param); // 4
template void foo(int param); // 5
Run Code Online (Sandbox Code Playgroud)
谷歌搜索了一下,我发现只有3号例子.它们之间是否存在差异(通话,编译,使用)?其中一些是否已过时/弃用?为什么不使用No.1?
我试图理解下面的示例,但是对三种不同的模板和结构声明感到有些困惑。
您能否描述下一次通话的结果?哪些模板将在何时使用?
为什么<S...>在结构体声明之后紧接着第一个template + class声明缺少“ ”?(请参见注释)?什么时候添加它是正确的,什么时候不正确?
#include <iostream>
#include <stdio.h>
using namespace std;
template<typename... S>
struct Example /* <S...> */ ;
template<typename H, typename... T>
struct Example<H, T...>
{
static const size_t value = sizeof(H) + Example<T...>::value;
};
template<>
struct Example<>
{
static const size_t value = 0;
};
int main(){
cout << Example<long, int, char>::value << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:13
c++ templates template-specialization variadic-templates c++11
我的代码是:
#include <iostream>
using namespace std;
template <typename T, int X>
class Test
{
private:
T container[X];
public:
void printSize();
};
template <typename T, int X>
void Test<T,X>::printSize()
{
cout <<"Container Size = "<<X <<endl;
}
int main()
{
cout << "Hello World!" << endl;
Test<int, 20> t;
Test<int, 30> t1;
t.printSize();
t1.printSize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
题:
<int, 20> 用于<int, 30>.如果我的理解错了,请纠正吗?我尝试查找这个并使用头文件等获得混合结果.
基本上我有多个cpp文件,其中包含我用于二叉树,BST,链表等的所有功能.
我想要做的不是必须复制和粘贴函数,因为我需要它们,我希望能够做到
#include <myBSTFunctions.h>
Run Code Online (Sandbox Code Playgroud)
并能够调用和使用我自己的功能.
完成此任务的步骤是什么?使用我使用的所有函数原型制作头文件?在哪里使用所有实际功能来放置cpp和头文件?有没有办法可以直接调用函数文件的目录?
即我更想把它与主源cpp文件放在同一个文件夹中,与我的一些同事分享.
我怎么能做到这一点?
编辑:Windows.miniGW编译器