Описание тега templates-deduction

1 ответ

Смешивание значений вариационных шаблонов и выведенных типов

Следующее точно определено стандартом? #include <iostream> template <unsigned int... Values, class... Types> void f(Types&&... values) { std::cout<<sizeof...(Values)<<" "<<sizeof...(Types)<<std::endl; } in…
3 ответа

Получение правильного value_type

В моем классе у меня есть член: std::vector<std::string> memory_; Теперь я хотел бы, чтобы fnc возвращал то, что находится в первом элементе памяти, но я не хочу указывать std::string в качестве типа возврата в случае, если позже я решу исполь…
1 ответ

Частичная спецификация шаблонной функции в C++ работает, но почему?

Я пытаюсь выяснить, является ли частичная спецификация шаблонных функций частью стандарта C++ или это что-то специфичное для компилятора. Под частичной спецификацией я подразумеваю указание только тех типов, которые компилятор не может определить. П…
2 ответа

Вычитание шаблона C++ не работает

Для следующего кода: #include<functional> template<typename T> void f(std::function<void(T)> g) { } template<typename T> void g(T x) { } int main() { f(&g<int>); } Компилятор C++14 выдает ошибку: no matching functio…
2 ответа

Почему std::function не может принять выведенный тип в качестве параметра шаблона?

#include <functional> using namespace std; template<class CharType> void f1(CharType* str, function<bool(CharType)> fn_filter) {} template<class CharType> void f2(CharType* str, function<bool(char)> fn_filter) {} void f…
30 окт '13 в 04:20
3 ответа

Параметры шаблона по умолчанию: Почему компилятор жалуется на отсутствие указания аргумента шаблона?

У меня есть этот код: struct A{}; template<class T = A> struct B { void foo() {} }; B b; //Error: missing template arguments before 'b' //Error: expected ';' before 'b' //More errors b.foo() Если я сделаю foo() как функция шаблона с тем же шаб…
2 ответа

Можно ли определить, является ли тип неполным без сбоя компиляции?

Я хочу добиться такого поведения, как sizeof(complete_type) вернет реальный sizeof, а sizeof(incomplete_type) - будет просто 0 Это необходимо для предоставления расширенной информации о типе времени выполнения для связи IPC(между процессами) со стру…
09 дек '11 в 17:03
1 ответ

Вывод параметров шаблона C++ не работает

Мне нужно переопределить связь между boost::signals2::signal а также boost::function, Для этого я создал следующую функцию шаблона: template<typename T> void bind(boost::signals2::signal<T> &signal, boost::function<T> function)…
2 ответа

Почему экземпляры шаблона не могут быть выведены в `std::reference_wrapper`s?

Предположим, у меня есть какой-то объект типа Tи я хочу поместить его в справочную оболочку: int a = 5, b = 7; std::reference_wrapper<int> p(a), q(b); // or "auto p = std::ref(a)" Теперь я могу с готовностью сказать, if (p < q)потому что сс…
4 ответа

Частичное упорядочение с шаблоном функции, имеющим неопределенный контекст

Читая другой вопрос, я столкнулся с проблемой частичного упорядочения, которую я сократил до следующего контрольного примера. template<typename T> struct Const { typedef void type; }; template<typename T> void f(T, typename Const<T&gt…
2 ответа

Выводит знание оригинальных типов, одновременно отправляя

Резюме: я хочу закончить с функцией, которая выводит точные типы, с которыми она была вызвана, и принимает (например) кортеж, который передает их (типы которых будут отличаться от точных типов, с которыми была вызвана функция). Я застрял, пытаясь "у…
25 окт '11 в 13:43
2 ответа

Вычет шаблона в dynamic_cast

У меня есть класс, который определяется следующим образом: template <class WidgetType> class CometWidget : public WidgetType; Внутри функции я делаю это: dynamic_cast<CometWidget *>(iter2->second.second)->changesCommited_(); и это …
3 ответа

Вывод типа с шаблоном, указателем метода и строками

Я столкнулся с серьезной проблемой вывода типа шаблона, когда я использую указатель метода в аргументе функции шаблона. Давайте возьмем следующий код: template <class ClassT, typename Arg1T> inline void testTemplateFct(ClassT * clazz, void (Cl…
1 ответ

Вычисление шаблона указателя на метод в C++ не компилируется при нацеливании на x86, но работает с x64

У меня есть этот пример кода: struct A { int foo() { return 27; } }; template<typename T> struct Gobstopper { }; template<> struct Gobstopper<int(void)> { Gobstopper(int, int) { } // To differentiate from general Gobstopper templat…
3 ответа

Почему автоматическое вычитание и вычитание типа шаблона отличаются для инициализированных скобками?

Я понимаю, что, учитывая инициализированный скобками, auto выведет тип std::initializer_list, в то время как вывод типа шаблона не удастся: auto var = { 1, 2, 3 }; // type deduced as std::initializer_list<int> template<class T> void f(T …
1 ответ

Вычитание шаблона C++ при вызове функции шаблона

FastDelegate ссылается на http://www.codeproject.com/KB/cpp/FastDelegate.aspx, но я не думаю, что это связано. У меня есть код, как следующий, и получил ошибку. #include <FastDelegate.h> using namespace fastdelegate; template <typename T&gt…
18 окт '11 в 16:37
3 ответа

Вывести аргумент шаблона из сигнатуры вызова std::function

Рассмотрим эту функцию шаблона: template<typename ReturnT> ReturnT foo(const std::function<ReturnT ()>& fun) { return fun(); } Почему компилятор не может сделать вывод ReturnT из подписи пропущенного вызова? bool bar() { /* ... */ } …
19 июн '12 в 14:40
2 ответа

Нет вызова соответствующей функции для функции сортировки с шаблонами (C++)

Я играю с шаблонами, и мне было интересно, почему я получаю ошибку несоответствующей функции при использовании шаблонов. /*selection sort*/ template <typename InputIterator, typename T> void selection_sort(InputIterator first, InputIterator la…
1 ответ

C++ Правила для замены аргументов

После полиморфизма C++ с boost scoped_ptr я хотел бы понять правила вывода аргументов C++. Например: правила полиморфных замен C++, когда используются умные указатели и контейнеры автоматические преобразования между константными и неконстантными арг…
24 мар '12 в 19:23
6 ответов

Шаблон вычитания для функции на основе ее типа возврата?

Я хотел бы иметь возможность использовать шаблон вывода для достижения следующего: GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate(); вместо (что у меня сейчас есть): GCPtr<A> ptr1 = GC::Allocate<A>(); GCPtr<B…
10 апр '10 в 10:09