C++ C++;模板元编程

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

我只是从模板元编程开始,所以我只是想从一些基本的东西开始。我得到了BST的大小和查找“方法”,所以我决定尝试创建一个字符串类。我在cpp文件中有以下代码:

#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
首先执行指针添加,然后才执行串接,以一路执行字符串串接do
std::string(“”)+C+ToString::str

@帖子已经不存在了:我不知道,这只是一个了解模板元编程的练习。比如Concat、CharAt、ToString和Length。这段代码输出“地狱”当我运行它的时候。听起来好像有人在对你做万圣节恶作剧=)你能使用varadic模板吗?你有没有试过先使用
typedef String myString;
,然后再使用这个链?@Dani我也在考虑使用可变模板的方法。它可能会降低嵌套级别。@R.M阿廷霍费尔南德斯:他将其用作静态成员。