什么是模板T&用字符串文字实例化时的参数?

时间:2013-07-04 16:25:47

标签: c++ templates metaprogramming

很抱歉提出一个我认为我知道答案的问题,但这对我来说似乎很奇怪,这是不正确的。

如果我有模板化功能

template<typename T>
int TemplatedSize(T &ref){
    return sizeof(ref);
}

我用这样的字符串文字实例化它:

int i = TemplatedSize("oh how I love C++ sometimes");

我通过模板实例化标记的内容是一个函数,它引用了一个长度为28的const char数组?我查找了语法,我必须说我以前从未在代码中看过它。这相当于什么是实例化的?

int NonTemplatedSize(const char (&arrayRef)[28]){
    return sizeof(arrayRef);
}

如果这是正确的话,如果我的函数体中只有一个sizeof并且调用了许多不同大小的字符串文字,那么我将不得不担心代码膨胀?

1 个答案:

答案 0 :(得分:0)

是的,这是正确的类型,是的,您将为传递给它的每个字符串文字长度获得一个新实例。为了帮助减少膨胀,您可以将这些函数内联,可能将char *和大小传递给另一个非模板函数。

int doSomeCalculation(const char *s,size_t n);

template <size_t n>
inline int doSomeCalculation(const char (&s)[n])
{
  return doSomeCalculation(s,n);
}