c ++非类型模板值的用途是什么?

Bar*_*uch 2 c++ templates

c ++非类型模板值有什么用?可以做些什么:

template <int I>
class MyClass
{
public:
    MyClass();
    .
    . //Use I;
    .
}
Run Code Online (Sandbox Code Playgroud)

这是不能做到的:

class MyClass
{
    int I;
public:
    MyClass(int i) : I(i) {}
    .
    . //Use I
    .
}
Run Code Online (Sandbox Code Playgroud)

在我看来,模板版本会为编译器创建不必要的开销,创建两个不同类型的对象,每个类方法都有单独的副本.

Ste*_*sop 8

一个用途是模板参数推导可以用来计算我,节省程序员的麻烦:

template<typename T, size_t N>
T *end(T (&ra)[N]) {
    return ra + N;
}

int main() {
    std::string headings[] = {"name", "dob", "address"};
    std::ostream_iterator<std::string> output(std::cout, "\t")
    std::copy(headings, end(headings), output);
    // or
    std::vector<std::string> headingvec(headings, end(headings));

}
Run Code Online (Sandbox Code Playgroud)

sizeof每次想要使用数组时都不会搞乱.

我很确定它的最初动机是类似于类模板std::bitset,正如其他人所提到的那样.


Dia*_*cus 6

使用模板,您可以执行此操作:

template <int I>
class MyClass
{
   int array[I];
}
Run Code Online (Sandbox Code Playgroud)

  • 啊,因为每个熟练的萨满程序员的梦想都是:没有开销的数组. (2认同)