Есть класс generic типа:
template<class T = ViewHolder>
class Adapter {
public:
virtual T *onCreateViewHolder(ViewGroup *parent, int viewType) = 0;
virtual void onBindViewHolder(T *holder, int position) = 0;
T *createViewHolder(ViewGroup *parent, int viewType) {
return onCreateViewHolder(parent, viewType);
}
void bindViewHolder(T *holder, int position) {
onBindViewHolder(holder, position);
}
virtual int getItemViewType(int position) { return 0; }
virtual int getItemCount() = 0;
virtual void onViewRecycled(T *holder) {};
}
Дочерний класс класс:
class MainHolder:public ViewHolder{
public:
MainHolder(View* itemView):ViewHolder(itemView){
pool_id = (TextView*)itemView->findById("pool_id");
}
};
class TestAdapter:public Adapter<MainHolder>
{
public:
TestAdapter(Context* ctx);
MainHolder* onCreateViewHolder(ViewGroup* parent, int viewType) override;
int getItemCount() override;
void onBindViewHolder(MainHolder* holder, int position) override;
~TestAdapter();
};
Хочется этот класс передать как в java, например
Adapter *mAdapter = nullptr;
void setAdapter(Adapter *adapter){
mAdapter = adapter;
mAdapter->getItemCount()
}
Но получается только вот так:
Adapter<ViewHolder> *mAdapter = nullptr;
void setAdapter(Adapter<ViewHolder> *adapter){
//....
}