Как неявно вызвать оператор вызова функции?

Как один неявно позвонить шаблонный объект класса вызов функции оператор?

class User_Type
{
public:
template< typename T > T operator()() const;
};

void function()
{
User_Type user_var;
int int_var_0 = user_var.operator()< int >(); // explicit function call operator; ugly.
int int_var_1 = user_var< int >(); // implicit function call operator.
}

g++-4.9 -Wall -WextraОшибка вывода:

    error: expected primary-expression before ‘int’
auto int_var_1 = user_var< int >();
^

2

Решение

Если аргумент шаблона должен быть указан явно, то вы не можете. Единственный способ указать это — использовать ваш первый синтаксис.

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

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

4

Другие решения

Там просто нет пути. можно немного обмануть с помощью неиспользуемого параметра, например

class User_Type
{
public:
template< typename T > T operator()( T * ) const;
};

void function()
{
User_Type user_var;
int int_var_1 = user_var((int*)0); // implicit function call operator.
}

но это не будет то, что вы точно хотите.

0

По вопросам рекламы [email protected]