lundi 8 février 2021

Initialize static variable inside the header file using template

Initialization of a static variable at the header file by using the templates (Used c++11, the 'inline' approach not supported)

cat base_class.hpp

#include <string>
#ifndef PROGRAM_BASE
#define PROGRAM_BASE
template <typename T>
struct S
{
    static std::string s_elfName;
};

template <typename T>
std::string S<T>::s_elfName; //static initialization

class program_base : public S<void>{
    public:

    static std::string GetElfName() { return S<std::string>::s_elfName; }
    bool update_string();
};
#endif

cat base_class.cpp

#include "base_class.hpp"

bool program_base::update_string(){
    S<std::string>::s_elfName =  "UpdateString";
}

cat read_string.cpp

#include <iostream>
#include "base_class.hpp"

using namespace std;

int main () {
    program_base pb; pb.update_string();
    cout << program_base::GetElfName() << endl;
}

The above one works fine, When I try to add templet inside the "class program_base"

cat base_class.hpp

#include <string>
#ifndef PROGRAM_BASE
#define PROGRAM_BASE
class program_base {
public:
    template <typename T>
    struct S
    {
        static std::string s_elfName;
    };
    template <typename T>
    std::string S<T>::s_elfName; //static initialization
    static std::string GetElfName() { return S<std::string>::s_elfName; }
    bool update_string();
};
#endif

it's giving an error as " error: member 's_elfName' declared as a template"

Why I'm not able to declare a template inside the class instead of inheriting it?

Aucun commentaire:

Enregistrer un commentaire