Şifreli başlık için özür dilerim.Bir akıllı işaretçiye sarılmış bir sınıfa üye olmanın daha basit bir yolu var mı?
struct TestNode {
using CostType = double;
};
Böyle bir sınıf şablonu tanımlayabilme istiyorum
: Bu tanım varsayalım Yukarıdaki tanımda
template <typename NodeP,
typename MyPolicy = /* CostType of the node type corresponding to NodeP */ >
struct TT {
};
, NodeP
olabilir ya basit veya akıllı işaretçi için TestNode
gibi CostType
'u tanımlayan bir sınıf. Sorun: MyPolicy
şablon parametresinin NodeP
'a karşılık gelen düğüm tipinin CostType
olması için nasıl bir varsayılan değer belirtebilir?
İşte benim çözüm şimdiye kadar geçerli: Bu sorunun daha basit bir yaklaşım
// like std::remove_pointer, but works with smart pointers as well
template <typename PT> struct my_remove_pointer {
using type = typename
std::remove_reference< decltype(*((PT)nullptr)) >::type;
};
struct TestNode {
using CostType = double;
};
template <typename NodeP,
typename MyPolicy = typename my_remove_pointer<NodeP>::type::CostType>
struct TT {
};
var mı? Özellikle, çözümü daha basit hale getirebilecek standart bir kütüphane tesisimi eksik miyim? Akıllı işaretçi dereferencing ve .get()
desteklediğinden
'std :: ile ikame edilebilir ((PT) nullptr) declval() '. –
Jarod42
ve aşağıdaki ad kullanabilirsiniz: 'template my_remove_poiner_t = typename std :: remove_reference ())> :: type;' –
Jarod42