我知道如何檢測 C 類中變數或常規方法的存在。但是,當方法是模板時,該怎么做呢?考慮代碼:
struct SomeClass
{
template<typename Sender, typename T>
auto& send(T& object) const
{
Sender::send(object);
return object;
};
};
如何撰寫類似的東西,is_sendable以便is_sendable<SomeClass>::value(或任何其他語法)回傳 true,因為SomeClass具有send上述方法?
uj5u.com熱心網友回復:
好的,如果有人感興趣,我最終設法解決了它:
我需要創建一個虛擬類
class DummySender
{
public:
template<typename T>
static void send(const T&)
{}
};
然后我可以通過定義型別特征來檢查發送方法的存在:
template<typename T, typename = void>
struct IsSendable: std::false_type
{};
template<typename T>
struct IsSendable<T, decltype(std::declval<T>().send<DummySender>(std::cout), void())> : std::true_type
{};
終于有了IsSendable<SomeClass>::value。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367249.html
下一篇:如何在C中打開檔案?
