Bir şablon sınıfı oluşturuyorum ve T'yi varsayılan tür bağımsız değişken olarak geçiriyorum. Ancak bu derleme başarısızlığına neden olur. Herkes ne olduğunu açıklayabilir mi? Teşekkür ederim!Neden dış şablondan std :: işlevine öntanımlı argüman olarak aktarılsın derleme hatası?
PS. Kullandığım derleyici VS2012'dir.
#include <functional>
using namespace std;
template <typename T = void()>
struct delegate
{
typedef function<T> function_t;
function_t f;
};
int main()
{
delegate<> d;
return 0;
}
Derleyici çıkışları:
1>.\Microsoft Visual Studio 11.0\VC\include\functional(554): error C2027: use of undefined type 'std::_Get_function_impl<_Tx>'
1> with
1> [
1> _Tx=void (__cdecl *)(void)
1> ]
1> test.cpp(12) : see reference to class template instantiation 'std::function<_Fty>' being compiled
1> with
1> [
1> _Fty=void (__cdecl *)(void)
1> ]
1> test.cpp(17) : see reference to class template instantiation 'delegate<>' being compiled
1>.\Microsoft Visual Studio 11.0\VC\include\functional(555): error C2504: 'type' : base class undefined
1>.\Microsoft Visual Studio 11.0\VC\include\functional(558): error C2027: use of undefined type 'std::_Get_function_impl<_Tx>'
1> with
1> [
1> _Tx=void (__cdecl *)(void)
1> ]
1>.\Microsoft Visual Studio 11.0\VC\include\functional(558): error C2146: syntax error : missing ';' before identifier '_Mybase'
1>.\Microsoft Visual Studio 11.0\VC\include\functional(558): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Bir MSVC derleyici hatası gibi görünüyor. G ++ 4.7.0 altında iyi derler. – Yuushi
@Yuushi Ah gerçekten mi? Çok teşekkür ederim. Sadece <0 işlevinin varsayılan bir versiyonunu yapmak istedim. Bu fonksiyon işlevine eşdeğerdir. –
Derleyici 'T''nizi' void() 'yerine bir' void (*)() 'ye çevirir, sonra' std :: işlevine iletir, ki bu 'std' ye geçmek için geçerli bir tür değildir. : function'. Muhtemelen bir argüman olarak "A (B ...)" veya "A (*) (B ...)' yi, diğeriyle de "şablon F sınıfı" ve "F Eğer konu üzerinde gerçekten çalışmak istiyorsan. –
Yakk