Можно создать дубликат:
How to declare a friend class conditionally?Можно ли условно объявить класс друга в C++ 11?
Этот вопрос ответвляется от Can friend class be declared conditionally in C++03?. В частности, предоставляет ли C++ 11 какие-либо дополнительные опции, которые могут помочь при условном объявлении класса друзей? То есть, возможно ли это сделать в C++ 11?
Пройдя через cplusplus.com, я наткнулся на std::enable_if
. Я попытался использовать его, но не смог понять правильный синтаксис. Является ли std::enable_if
правильной конструкцией для использования для этой цели? Ниже приведен код, который я пробовал, на основании приведенного здесь примера. Мне здесь не нужен шаблон, но я не знаю, как его избежать, поскольку все приведенные здесь примеры кода используют его.
class Foo {
template<typename T> struct std::enable_if<true, T> {
typedef T Bar;
friend class Bar;
};
};
Это дает следующее сообщение об ошибке компиляции:
prog.cpp:5:36: error: 'enable_if' is not a template
prog.cpp:5:55: error: qualified name does not name a class before '{' token
Редактировать Просто, чтобы сделать это более легко видно, как указано ниже в комментариях: Это требование является необычным. Это часть нового исследовательского проекта в области аппаратного моделирования, над которым я работаю. Testbench написан на C++, и я хочу отображать переменные в форме волны. Я исследовал различные другие варианты и понял, что мне нужно использовать класс друзей, из-за практических соображений. Друг захватит значения и сформирует форму волны, но я предпочел бы иметь друга только тогда, когда требуется форма волны, и не все время.
Зачем вам это нужно? –
Что вы пытаетесь достичь? – Nawaz
@ K-ballo Я использую это в новом исследовательском проекте по аппаратной симуляции. Код testbench написан на C++, и я хочу предоставить новую функцию, чтобы увидеть значения переменных-членов в форме сигнала во время моделирования. Класс friend будет захватывать значения и генерировать форму волны. Я хочу, чтобы этот друг присутствовал только тогда, когда требуется форма волны, и не всегда. –