2010-07-30 2 views
3

Можно создать дубликат:
How to use local classes with templates?Шаблон конкретизации отказался с функцией локального класса

г ++ 4.4 отказывается компилировать вызов функции шаблона принимает функцию локального класса в качестве шаблона параметр. Например:

// Given this: 
template <typename C> 
int f(const C& c) { 
    return c.g(); 
} 

// This compiles fine: 
struct C1 { 
    int g() const { return 42; } 
}; 

int h1() { 
    return f(C1()); 
} 

// But this doesn't: 
int h2() { 
    struct C2 { 
     int g() const { return 42; } 
    }; 
    return f(C2()); // error: no matching function for call to "f(h2()::C2)" 
} 

// Nor does this: 
int h3() { 
    struct C3 { 
     int g() const { return 42; } 
    }; 
    return f<C3>(C3()); // same error 
} 

Что дает? Как это сделать? (В реальной программе, из которой это обрезается, «h» является функцией-членом, а «C» - вложенным классом, так что это неявно является другом класса, членом которого является «h».)

ответ

2

C++ 0x устранит это нежелательное ограничение.

На данный момент, вы можете сделать C я надлежащего вложенного класса (внутри класса h «s, а не внутри h).

+0

Спасибо за обходной путь. Это печально, потому что «С» используется только в одном месте, но по крайней мере мне не нужно публиковать вещи, которых не должно быть. – zwol

1

Локальный класс не может быть параметром шаблона.

C++ can local class reference be passed to a function?

+0

Глава и стихи, пожалуйста? Или ссылку на дальнейшую экспликацию? – zwol

+0

@Zac искал ссылку, обновленную информацию – Anycorn

+0

Спасибо. Как неудобно. – zwol

1

параметры шаблона должны иметь Экстерн связь.