使用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