使用C++11引入的局部静态变量来存储模板函数的静态变量。每个模板实例都将获得其自己的静态变量副本,而无需使用辅助函数。
示例代码:
template
void do_something(T val) {
static std::map& counter = []() -> std::map& {
static std::map counter;
return counter;
}();
++counter[val];
std::cout << "val: " << val << ", count: " << counter[val] << std::endl;
}
int main() {
do_something(1);
do_something(2);
do_something(1);
do_something(3);
return 0;
}
以上代码中,counter
变量是模板函数do_something
的静态变量,类型为std::map
,它被定义为一个包含lambda表达式的静态变量。该lambda表达式返回一个引用,该引用初始化为一个静态局部变量counter
。 在每个调用模板函数do_something
的实例时,都将访问其自己的静态变量副本。 在示例中,输出结果为:
val: 1, count: 1
val: 2, count: 1
val: 1, count: 2
val: 3, count: 1