Как инициализировать статический член класса, используемый в методе шаблона?

#c #templates #member #static-members

#c #шаблоны #Участник #статические члены

Вопрос:

Я хочу статическую константу, LIST_DELIMITER , определенную в моем классе ниже. Однако я не могу понять, как объявить его с помощью шаблонов.

 // MyClass.h
#pragma once
#include <boost/algorithm/string.hpp>
#include <vector>

class MyClass
{
public:
    MyClass();
    virtual ~MyClass();

    template<class T>
    void GetAsVectorOfValues(std::vector<T> values)
    {
        boost::split(values, value_, boost::is_any_of(LIST_DELIMITER));
    }

private:
    std::string value_;
    static const std::string LIST_DELIMITER;
};

// MyClass.cpp
std::string MyClass::LIST_DELIMITER = ",";
  

Я знаю, что в stackoverflow есть похожие вопросы, но, похоже, я не могу найти то, что ищу. Единственное, что отличается в моем случае, это то, что весь мой класс не шаблонный, только один метод.

Ответ №1:

Вы должны использовать точно такое же объявление, включая квалификаторы:

 const std::string MyClass::LIST_DELIMITER = ",";
^^^^^
  

В этом определении статического члена класса нет шаблона.

Комментарии:

1. И вы не включаете static , потому что это не «квалификатор», это область видимости (и связь).