2013-03-15 4 views
0

Я инженерный студент, а не очень сильный программист. Одно из моих назначений включает создание VR-программы с использованием openGL. Мне был предоставлен шаблон (который я действительно не хочу переписывать), который широко использует заголовки gmtl. Назначение требует реализации некоторого sixense оборудования для отслеживания местоположения в симуляции, однако заголовки для шестимерного оборудования и gmtl имеют несколько классов (плоскость, линия и т. Д.) С одинаковыми именами. Есть ли что-нибудь, что я могу сделать, чтобы использовать и то, и другое, не связанное с большим количеством кода и переименованием?C++ Заголовки с тем же именем класса

+0

не определены ли они в разных пространствах имен? –

+1

Являются ли они в пространствах имен? Если это так, все должно быть в порядке. –

+0

gmtl определенно находится в пространстве имен 'gmtl'. –

ответ

2

Как комментаторы заявили, что они находятся в разных пространствах имен, так что вы должны быть в порядке, до тех пор, как вы полностью квалифицировать ваше пространство имен, что является хорошей практикой тоже:

namespace foo { int value; } 
namespace bar { int value; } 

int main() 
{ 
    foo::value = 1; 
    bar::value = 2; 
    return 0; 
} 

Вы только столкнетесь с проблемами, если вы используете using namespace опрометчиво:

namespace foo { int value; } 
namespace bar { int value; } 

using namespace foo; 
using namespace bar; 

int main() 
{ 
    value = 1; // which value is this??? 
    return 0; 
} 

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

+0

Да. Думаю, я это понимаю. Является ли разумным просто заключить весь код в шестиэлементных файлах заголовков в пространстве имен? – kballing

+0

@kballing Нет, не принимайте чей-то код и оберните его в 'namespace foo' - это плохая идея. Удалите «использование пространства имен gmtl» из вашего кода везде. Не пытайтесь придерживаться кода someones в пространстве имен, они сами не поместили его. Никогда не добавляйте '# include' файл в блок' namespace blah {'...'} '. (ну, естественно, не всегда, но никогда не является самым простым приближением) – Yakk

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