2013-04-06 3 views
-8

Хорошо, ребята!C++ Templates - Passing Class member

У меня есть небольшая проблема здесь, чтобы сделать его проще, это более или менее, как он выглядит:

window.h

template <ObjectType &x> 
class foo { stuff } 

game.h

class gameclass { ObjectType a; } 

main.cpp

gameclass mygame; 
foo<mygame.a> fooa; 

Теперь fooa терпит неудачу, поскольку каким-то образом он не позволяет мне отправлять член mygame 'a' в качестве аргумента шаблона.

Теперь как я могу отправить член класса в качестве параметра шаблона?

Спасибо

+6

Это не имеет смысла. Предполагается, что аргумент шаблона является * типом *, а не объектом. Если вы хотите * тип * 'a', тогда просто сделайте' foo fooa; '. –

+0

Ваш шаблон 'foo' ожидает * тип *. Вы передаете значение, вычисленное во время выполнения. Как вы ожидаете использовать 'x' в части, помеченной как« материал »? Непонятно, что вы хотите сделать –

+3

Вы забыли прочитать свою книгу на C++. –

ответ

1

Кажется, что вы хотите передать параметр шаблона не типа и более конкретно, указатель на член. За то, что вы хотите, вы должны пользователь:

template<ObjectType gameclass::* ptr> 
struct foo 
// ... 

Обратите внимание, что позволит вам получить доступ к элементу объекта, только если у вас есть указатель на этот объект.

У вас может быть более подробная информация here (pointer-to-member as template parameter) или here (pointer-to-members).

Обратите внимание, что вы не можете передать значение mygame.a в шаблон в коде вы в курсе, потому что:

  1. параметры шаблона являются время компиляции, ваше значение во время выполнения.
  2. Параметры шаблона непигового типа не могут быть ни одного типа объекта, только интегрального (или enum), указателя/ссылки на объект/функцию или указателя на элемент.

EDIT: Вы изменили свой шаблон template<ObjectType& x>. Это верно для reference to object. Однако mygame.a не является ссылкой, это значение. Чтобы указать участника, вы должны использовать синтаксис &mygame::a, который заставляет вас использовать указатель на член.

Смежные вопросы