何百万回もインスタンス化されるクラスがあります。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()
ます。
これを行う方法はありますか?
(これは不自然な例ですが、私が抱えている問題の本質です。)