C++ C++;模板元编程
我只是从模板元编程开始,所以我只是想从一些基本的东西开始。我得到了BST的大小和查找“方法”,所以我决定尝试创建一个字符串类。我在cpp文件中有以下代码:C++ C++;模板元编程,c++,templates,metaprogramming,C++,Templates,Metaprogramming,我只是从模板元编程开始,所以我只是想从一些基本的东西开始。我得到了BST的大小和查找“方法”,所以我决定尝试创建一个字符串类。我在cpp文件中有以下代码: #include <iostream> #include <string> using namespace std; struct Null; // String template <char C, typename S> struct String { static const char chr
#include <iostream>
#include <string>
using namespace std;
struct Null;
// String
template <char C, typename S>
struct String {
static const char chr = C;
typedef S tail;
};
// ToString
template <typename S>
struct ToString;
template <char C, typename S>
struct ToString<String<C, S> > {
static const string str;
};
template <char C, typename S>
const string ToString<String<C, S> >::str = C + ToString<S>::str; // (*)
template <char C>
struct ToString<String<C, Null> > {
static const string str;
};
template <char C>
const string ToString<String<C, Null> >::str = C + ""; // to make it a string
int main() {
typedef String<'H', String<'e', String<'l', String<'l',
String<'o', Null> > > > > myString;
cout << ToString<myString>::str << endl;
return 0;
}
#包括
#包括
使用名称空间std;
结构空;
//串
模板
结构字符串{
静态常量char chr=C;
尾巴;
};
//托斯特林
模板
结构ToString;
模板
结构ToString{
静态常量字符串str;
};
模板
常量字符串ToString::str=C+ToString::str;//(*)
模板
结构ToString{
静态常量字符串str;
};
模板
常量字符串ToString::str=C+“”;//把它做成一根绳子
int main(){
typedef字符串myString;
cout“”+C+ToString::str
首先执行指针添加,然后才执行串接,以一路执行字符串串接dostd::string(“”)+C+ToString::str
@帖子已经不存在了:我不知道,这只是一个了解模板元编程的练习。比如Concat、CharAt、ToString和Length。这段代码输出“地狱”当我运行它的时候。听起来好像有人在对你做万圣节恶作剧=)你能使用varadic模板吗?你有没有试过先使用typedef String myString;
,然后再使用这个链?@Dani我也在考虑使用可变模板的方法。它可能会降低嵌套级别。@R.M阿廷霍费尔南德斯:他将其用作静态成员。