1

何百万回もインスタンス化されるクラスがあります。C++ テンプレートです。クラスはすべての値のカウントを追跡し、値は型T(Tはテンプレート パラメーター) です。

カウント追跡される値である特殊なケースがあります。この場合、テンプレート化されたインスタンス変数を省略して、代わりにカウントだけを取得したいと考えています。

たとえば、次のプログラムがあります。

#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 に答える