1

我有一个将被实例化数百万次的类。这是一个 C++ 模板。该类跟踪每个值的计数,并且这些值是类型的TT模板参数在哪里)。

我有一个特殊情况,其中计数被跟踪的值。在这种情况下,我想省去模板化的实例变量,而只需要计数。

例如,这是一个程序:

#include <stdio.h>
#include <iostream>
#include <stdint.h>

template <typename T>
class A {
private:
    T var_;
    uint64_t count_;
public:
    A(T v):var_(v),count(0){ }
    uint64_t count() const { return count_;}
    T var() const { return var_;}
    void inc_count();
};

template <typename T> void A<T>::inc_count() {
    count_++;
};

template <typename T> std::ostream & operator <<(std::ostream &os, const A<T> &e) {
    os << e.count() << "=" << e.var();
    return os;
};


int main(int argc,char **argv)
{
    A<int> a(3);

    a.inc_count();
    std::cout << a << "\n";

    a.inc_count();
    std::cout << a << "\n";
}

我希望能够实例化为:

A<uint64_t> deg(1);

在这种情况下,我希望将count_变量设置为1并让方法var()return count()

有没有办法做到这一点?

(这是一个人为的例子,但它是我遇到的问题的本质。)

4

1 回答 1

9

只需使用显式专业化:

template<> class A<uint64_t> { /* whatever you like goes here */ };
于 2013-01-17T22:01:41.440 回答