Вывод параметров шаблона с политиками - PullRequest
2 голосов
/ 09 октября 2011

У меня есть класс, который должен использоваться для применения операторов к скалярам или векторам, и их комбинация 2. Класс работает, но я должен вручную передать параметры шаблона, в то время как я хотел бы, чтобы их вычиталиконструкторКод следующий:

template <template <class,class> class OP, typename Type1, typename Type2>
class BinaryOperator :
    public OP <typename Type1::ReturnType, typename Type2::ReturnType> {
public:

    BinaryOperator(Type1* arg1_, Type2* arg2_) :
        m_arg1(arg1_),
        m_arg2(arg2_) {

    }

    ReturnType evaluate() {
        return this->apply(m_arg1->evaluate(), m_arg2->evaluate());
    }

private:
    Type1* m_arg1;
    Type2* m_arg2;
};

Теперь OP - это структура с полной специализацией шаблона для различных комбинаций Scalar / Vector, которые являются типами ReturnTypes параметров 2 ctor.Я должен написать явно

new BinaryOperator<op_adder, Axis, Constant>(a1, c2)

, в то время как я просто хотел бы написать

new BinaryOperator<op_adder>(a1, c2)

и вычесть Axis и Constant.Ошибка компилятора:

 too few template arguments for class template 'BinaryOperator'

Может кто-нибудь помочь?Что я делаю не так?Спасибо, Алекс

1 Ответ

5 голосов
/ 09 октября 2011

Типы классов никогда не могут выводить аргументы шаблона;в конце концов, как компилятор может узнать, какие конструкторы следует учитывать, прежде чем он узнает, какой класс вы пытаетесь создать?

Решение состоит в том, чтобы написать вспомогательную функцию, ala std::make_pair.

template<typename T, typename U, typename V>
BinaryOperator<T, U, V> make_binary_operator(const U& u, const V& v) {
  return BinaryOperator<T, U, V>(u, v);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...