Если вы хотите добавить только один вопрос, вы можете объединить наследование со специализацией:
template <typename T>
class reflected_base {
// your current 'reflected' contents go here
};
template <typename T>
class reflected : public reflected_base { };
template <>
class reflected<bool> : public reflected_base {
vector<ar_index> which();
};
Недостатком этого подхода является то, что вам приходится переопределять определенные операции (деструкторы, конструкторы копирования и т. Д.) Для каждой специализации. Другой вариант будет:
template <typename T>
class specialized_reflected { };
template <>
class specialized_reflected<bool> {
public:
vector<ar_index> which();
};
template <typename T>
class reflected : public specialized_reflected<T> {
// your current 'reflected' contents go here
};
Хотя, тогда есть потенциальные проблемы с зависимым поиском имени. Третий вариант (и, вероятно, тот, который я выбрал бы) состоял бы в использовании функции, не являющейся членом:
vector<ar_index> which(reflected<bool>&);