Re[13]: error C2784: could not deduce template argument
От: B0FEE664  
Дата: 15.10.15 16:18
Оценка:
Здравствуйте, collider, Вы писали:

C>Ну а если бы и это не проканало, я бы ему int последовательно в другие щели пихал бы.


Ну да, ну да:
void test_t(struct_t<std::vector<int>>(std::vector<int>(123)))
тоже вариант.
И каждый день — без права на ошибку...
Re[7]: error C2784: could not deduce template argument
От: B0FEE664  
Дата: 15.10.15 16:24
Оценка:
Здравствуйте, collider, Вы писали:

C>>>Пример ваш не корректен,конечно foo<int>.

К>>Это почему вдруг? Чем специализации хуже основного шаблона?
C>ну наверное тем, что 123- это int
У foo<char> как раз есть конструктор от int
И каждый день — без права на ошибку...
Re[13]: error C2784: could not deduce template argument
От: T4r4sB Россия  
Дата: 15.10.15 16:52
Оценка:
Здравствуйте, collider, Вы писали:

C>А фиг знает, я ж до конструктора не доберусь, пока struct_t не конкретизирую.


Да, верно, дело в этом.
А дальше уже правила становятся не очень очевидными, поэтому вывод не стали делать слишком умным.
Надеюсь, вариант с промежуточной функцией (в которой явно задано правило, какую struct_t<T> выбрать) у тебя прокатил?

А сколько раз ещё тебе придётся писать вот так:
template <typename T>
struct SomeStruct__
{
    SomeStruct__(const T& t) 
    { 
        // какой-то код
    }
    // много кода, полей, методов
};

template <typename T>
SomeStruct__<T> SomeStruct(const T& t) 
{
    return SomeStruct__<T>(t);
}

Это конструкция случайно не имеет специального названия?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Отредактировано 15.10.2015 16:54 T4r4sB . Предыдущая версия .
Re[14]: error C2784: could not deduce template argument
От: collider  
Дата: 16.10.15 07:50
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, collider, Вы писали:


C>>Ну а если бы и это не проканало, я бы ему int последовательно в другие щели пихал бы.


BFE>Ну да, ну да:

BFE>void test_t(struct_t<std::vector<int>>(std::vector<int>(123)))
BFE>тоже вариант.

Все уже поняли какой у вас любимый класс-шаблон
Но идея в том, чтобы подсовывать имеющие типа а не придумывать, что то.
Re[8]: error C2784: could not deduce template argument
От: collider  
Дата: 16.10.15 07:53
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, collider, Вы писали:


C>>>>Пример ваш не корректен,конечно foo<int>.

К>>>Это почему вдруг? Чем специализации хуже основного шаблона?
C>>ну наверное тем, что 123- это int
BFE>У foo<char> как раз есть конструктор от int

конструктор то может и подходит, но без конкретизации шаблона никто ничего о нем не знает.
Re[14]: error C2784: could not deduce template argument
От: collider  
Дата: 16.10.15 08:01
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Здравствуйте, collider, Вы писали:


C>>А фиг знает, я ж до конструктора не доберусь, пока struct_t не конкретизирую.


TB>Да, верно, дело в этом.

TB>А дальше уже правила становятся не очень очевидными, поэтому вывод не стали делать слишком умным.
TB>Надеюсь, вариант с промежуточной функцией (в которой явно задано правило, какую struct_t<T> выбрать) у тебя прокатил?

TB>А сколько раз ещё тебе придётся писать вот так:

TB>
TB>template <typename T>
TB>struct SomeStruct__
TB>{
TB>    SomeStruct__(const T& t) 
TB>    { 
TB>        // какой-то код
TB>    }
TB>    // много кода, полей, методов
TB>};

TB>template <typename T>
TB>SomeStruct__<T> SomeStruct(const T& t) 
TB>{
TB>    return SomeStruct__<T>(t);
TB>}
TB>

TB>Это конструкция случайно не имеет специального названия?
Ну как сказать... Приведенный мною пример немного проще, чем на самом деле.
Сама идея была в том, чтобы упростить жизнь при использовании классов и дать возможность передавать как обертку struct_t<T> так и T
в конструкторы. А я человек, прямо скажем, ленивый, и хотел эту мелкую проблему как то хитренько и быстренько обойти.
Не получилось, пришлось добавлять конструкторы с struct_t<T> и T.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.