Когда компилятор может вывести шаблонный параметр?

Используйте ROUND, который округляет первый аргумент до количества десятичных разрядов, указанного во втором аргументе

=IF(ROUND(AL23 * 0.2, 2) = AM23, "a", "r")

Рассмотрим ROUNDDOWN или ROUNDUP для другого поведения округления: ROUND будет круглые полпути и выше вверх.

(Кроме того, не стоит жестко кодировать ставку НДС в формуле в случае ее изменения в будущем.)

32
задан Łukasz Lew 28 April 2009 в 12:21
поделиться

2 ответа

Параметры шаблона могут быть выведены для шаблонов функций , когда тип параметра может быть выведен из параметров шаблона

. Таким образом, здесь можно сделать вывод:

template <typename T>
void f(T t);

template <typename T>
void f(std::vector<T> v);

, но не здесь:

template <typename T>
T f() {
  return T();
}

А не в шаблонах классов .

Поэтому обычное решение вашей проблемы - создать функцию-оболочку, аналогичную стандартной библиотечной функции std :: make_pair :

  template <class T>
    class MyClass {
    public:
        MyClass(T t) {}
        void print(){
            std::cout<<"try MyClass"<<std::endl;
        }
    };

    template <typename T>
    MyClass<T> MakeMyClass(T t) { return MyClass<T>(t); }

, а затем вызовите auto a = MakeMyClass (5); для создания экземпляра класса.

56
ответ дан 27 November 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: