2.5. Включение встраиваемого файла

2.5. Включение встраиваемого файла

Проблема

Имеется несколько функций-членов или самостоятельных функций, которые требуется сделать встраиваемыми (inline), но вы не хотите определять их все в определении класса (или даже после него) в заголовочном файле. Это позволит хранить объявление и реализацию по отдельности.

Решение

Создайте файл .inl и с помощью #include включите его в конец своего заголовочного файла. Это эквивалентно помещению определения функции в конец заголовочного файла, но позволяет хранить объявление и определение раздельно. Пример 2.6 показывает, как это делается.

Пример 2.6. Использование встраиваемого файла

// Value.h

#ifndef VALUE_H__

#define VALUE_H__

#include <string>

class Value {

public:

 Value (const std::string& val) : val_(val) {}

 std::string getVal() const;

private:

 std::string val_;

};

#include "Value.inl"

#endif VALUE_H__

// Value.inl

inline std::string Value::getVal() const {

 return(val_);

}

Это решение не требует пояснений, #include заменяется на содержимое ее аргумента, так что здесь в заголовочный файл включается содержимое Value.inl. Следовательно, любой файл, включающий этот заголовочный файл, содержит определения встраиваемых функций, но вам не требуется загромождать объявление класса.