Может быть, было бы лучше, если бы вы указали, что вы хотите сделать. Почему вы хотите создать безымянный класс? Соответствует ли он интерфейсу? Безымянные классы довольно ограничены, их нельзя использовать в качестве параметров функций, их нельзя использовать в качестве типовых параметров шаблонов...
Теперь, если вы реализуете интерфейс, вы можете передать ссылки на этот интерфейс:
class interface {
public:
virtual void f() const = 0;
};
void function( interface const& o )
{
o.f();
}
int main()
{
class : public interface {
public:
virtual void f() const {
std::cout << "bar" << std::endl;
}
} bar;
function( bar ); // will printout "bar"
}
ПРИМЕЧАНИЕ. Для всех тех ответов, которые рассматривают аргументы шаблона как вариант, безымянные классы нельзя передавать в качестве аргументов типа шаблона.
Стандарт С++. 14.3.1, пункт 2:
2 Локальный тип, тип без связи, безымянный тип или тип, составной из любого из этих типов, не должны использоваться в качестве аргумента шаблона для параметра типа шаблона.
При тестировании с помощью компилятора comeau (ссылка для онлайн-тестирования) вы получите следующую ошибку. :
ошибка: аргумент шаблона не может ссылаться на безымянный тип
В качестве примечания: компилятор Comeau является наиболее совместимым со стандартами компилятором, который я знаю, помимо того, что он обладает самой полезной диагностикой ошибок, которую я пробовал.
ПРИМЕЧАНИЕ. Comeau и gcc (g++ 4.0) выдают ошибку с приведенным выше кодом. Компилятор Intel (и из комментариев других людей MSVS 2008) допускает использование неназванных классов в качестве параметров шаблона в отличие от стандарта.
13.06.2009