<typename ConcreteSigner>
class Signer {
public:
using message_t = std::string;
using keypair_t = typename ConcreteSigner::keypair_t;
using signature_t = typename ConcreteSigner::signature_t;
using pubkey_t = typename ConcreteSigner::pubkey_t;
using privkey_t = typename ConcreteSigner::privkey_t;
...
class Ed25519Signer final : public Signer<Ed25519Signer> {
public:
/// use parent's constructor
using Signer<Ed25519Signer>::Signer;
using pubkey_t = ed25519::PublicKey;
using privkey_t = ed25519::PrivateKey;
using signature_t = ed25519::Signature;
using keypair_t = ed25519::Keypair;
хочется сделать CRTP так, что базовый класс параметризуется только одним типом (Ed25519Signer в этом случае), но тянет за собой все типы, используемые внутри конкретных имплементаций. Это возможно?
на код выше g++ говорит "invalid use of incomplete type" на каждом using внутри базового класса (Signer), кроме message_t.
по идее, ты их всех должен определить в class Ed25519Signer, а не юзать
Обсуждают сегодня