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)
在我看来,模板版本会为编译器创建不必要的开销,创建两个不同类型的对象,每个类方法都有单独的副本.
一个用途是模板参数推导可以用来计算我,节省程序员的麻烦:
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,正如其他人所提到的那样.
使用模板,您可以执行此操作:
template <int I>
class MyClass
{
int array[I];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |