У меня есть шаблон шаблона под шаблоном, который я использую с unique_ptr для удаления типов C.Аргумент шаблона функции с любым типом возвращаемого значения
template<typename T, void (*DeletorFunc)(T*)>
struct CTypeDeletor
{
void operator()(T* ptr)
{
DeletorFunc(ptr);
}
};
int main(void)
{
typedef unique_ptr<CType, CTypeDeletor<CType, CType_free>> CTypePtr;
CTypePtr ctype(CType_new());
// ctype will be deleted when we return from main
}
Ну, это работает до тех пор, пока тип возврата CType_free не будет "void". Но если возвращаемый тип функции dfree не является «void», тогда я не мог использовать CTypeDeletor.
Есть ли способ, чтобы сделать CTypeDeletor более универсальным, чтобы я мог использовать свободную функцию с любым типом возврата?
Как будет использоваться тип возврата, отличный от 'void'? –
@RSahu 'fclose', например, не возвращает' void'. –
Если все 'CTypeDeletor' делает, обертывает указатель на функцию, почему бы просто не использовать тип указателя функции непосредственно как тип делетера? –