template instantiation
От: Аноним  
Дата: 05.02.04 16:27
Оценка:
Hi!

Compiler: MS7.1

template<class T>
void func(typename T::reference v);

template void func<vector<int> >( vector<int>::reference v);


Compiler says:
warning C4667: 'void func(std::vector<_Ty>::reference)' : no function template defined that matches forced instantiation
with
[
_Ty=int
]

Как бороться?
Re: template instantiation
От: Павел Кузнецов  
Дата: 05.02.04 16:42
Оценка:
Здравствуйте, , Вы писали:

> template<class T>

> void func(typename T::reference v);

> template void func<vector<int> >( vector<int>::reference v);


В этой точке компилятор пытается по твоей просьбе инстанциировать специализацию
шаблона функции, но сделать этого не может, т.к. определение шаблона недоступно.

> warning C4667: 'void func(std::vector<_Ty>::reference)' : no function

> template defined that matches forced instantiation

> Как бороться?


Определить шаблон до явного инстанциирования.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: template instantiation
От: Аноним  
Дата: 05.02.04 16:50
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

То, то означает ошибка я перевел своими силами. В куске кода, который я привел, шаблон определяется. Меня как раз и интересует, почему хотя шаблон определен, инст. не проходит.

>> template<class T>

>> void func(typename T::reference v);

>> template void func<vector<int> >( vector<int>::reference v);


ПК>В этой точке компилятор пытается по твоей просьбе инстанциировать специализацию

ПК>шаблона функции, но сделать этого не может, т.к. определение шаблона недоступно.

>> warning C4667: 'void func(std::vector<_Ty>::reference)' : no function

>> template defined that matches forced instantiation

>> Как бороться?


ПК>Определить шаблон до явного инстанциирования.
Re[3]: template instantiation
От: Павел Кузнецов  
Дата: 05.02.04 17:06
Оценка:
Здравствуйте, Вы писали:

>>> template<class T>

>>> void func(typename T::reference v);

>>> template void func<vector<int> >( vector<int>::reference v);


> То, то означает ошибка я перевел своими силами. В куске кода,

> который я привел, шаблон определяется. Меня как раз и интересует,
> почему хотя шаблон определен, инст. не проходит.

В приведенном куске шаблон только объявлен, но не определен.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: template instantiation
От: Аноним  
Дата: 05.02.04 17:31
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>В приведенном куске шаблон только объявлен, но не определен.

У меня изначально в коде он был определен. При определении все равно та ж ошибка.
Re: template instantiation
От: Vladimir Khatzkevich Россия  
Дата: 05.02.04 18:21
Оценка:
Здравствуйте, Аноним, Вы писали:

A>Compiler: MS7.1

[skip]
А>Как бороться?
Можно так (тот же компилятор):
#include "stdafx.h"
#include <vector>

template<class T>
void func(typename T::reference v)
{
    int k = v;
    printf("val: %d\n", k);
}

typedef std::vector<int> MyVector;

int _tmain(int argc, _TCHAR* argv[])
{
    MyVector a;   a.push_back(10);
    func<MyVector>(a[0]);
    return 0;
}
Любая сложная технология неотличима от волшебства. (Артур Кларк)
Re[2]: template instantiation
От: Аноним  
Дата: 06.02.04 08:01
Оценка:
Здравствуйте, Vladimir Khatzkevich, Вы писали:

Сейчас такая заглушка и стоит, но хочется все же через explicit instantiate.

VK>
VK>#include "stdafx.h"
VK>#include <vector>

VK>template<class T>
VK>void func(typename T::reference v);
VK>{
VK>    int k = v;
VK>    printf("val: %d\n", k);
VK>}

VK>typedef std::vector<int> MyVector;

VK>int _tmain(int argc, _TCHAR* argv[])
VK>{
VK>    MyVector a;   a.push_back(10);
VK>    func<MyVector>(a[0]);
VK>    return 0;
VK>}
VK>
Re: template instantiation
От: Sergeem Израиль  
Дата: 09.02.04 09:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Hi!


А>Compiler: MS7.1


А>template<class T>

А>void func(typename T::reference v);

А>template void func<vector<int> >( vector<int>::reference v);


<skip>

А>Как бороться?


А помоему так ваще нельзя ни объявлять, ни инстанциировать.
Например, я добавил еще инстанциированную функцию:

template void func<list<int> >( list<int>::reference v);

теперь в коде:

func(10); // какую функцию вызвать???
Serge.

Hасколько проще была бы жизнь, если бы она была в исходниках.
Re[2]: template instantiation
От: folk Россия  
Дата: 09.02.04 09:31
Оценка:
Здравствуйте, Sergeem, Вы писали:

S>Здравствуйте, Аноним, Вы писали:


А>>Hi!


А>>Compiler: MS7.1


А>>template<class T>

А>>void func(typename T::reference v);

А>>template void func<vector<int> >( vector<int>::reference v);


S><skip>


А>>Как бороться?


S>А помоему так ваще нельзя ни объявлять, ни инстанциировать.

S>Например, я добавил еще инстанциированную функцию:

S>template void func<list<int> >( list<int>::reference v);


S>теперь в коде:


S>func(10); // какую функцию вызвать???


Вывод аргументов для такого шаблона вообще работать не будет, только явное указание:

int i = 10;
func<list<int> >(i);
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.