LINUX.ORG.RU

Сообщения whatfor

 

[с++]Синтаксис вызова шаблонного метода шаблонного класса.

Сабж дополнение: вызов через ссылку на объект в обычной функции, т.е.:


#include <iostream>


template < class T >
struct TClass
{
	T t;
	
	template < int arg >
	void print_arg() { std::cout << arg << std::endl; }
	
	void test_print() { print_arg<1>(); }
};

template < class T >
void TFunc( TClass<T> & TC )
{
	//TC.print_arg<3>(); // line #18
}

int main( void )
{
	TClass < void* > TC;

	TC.test_print();   // print "1"

	TC.print_arg<2>(); // print "2"

	TFunc( TC );       // print "3" // line #30

	return 0;
}


Так всё прекрасно, но если разкомментировать вызов метода в функции TFunc, то компилер выплёвывает следующее:


ttest.cpp: In function ‘void TFunc(TClass<T>&)’:
ttest.cpp:18: error: expected primary-expression before ‘)’ token
ttest.cpp: In function ‘void TFunc(TClass<T>&) [with T = void*]’:
ttest.cpp:30:   instantiated from here
ttest.cpp:18: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’

Т.е. здесь он почему-то пытается сравнить функцию с int'овым значением и при этом говорит что перегруженная функция не «разрешена», и как бы я не плясал со скобками и перемещениями шаблонного аргумента, так и не смог заставить его проглотить это. Знает кто-нибудь как это обойти и с чем всё это связано?

 

whatfor
()

RSS подписка на новые темы