環境
- C++17
- Visual Studio 2019
質問内容
enum の定数がいくつかあり、それに対応する値や文字列を定義したいです。
現在は、std::vector や std::map を使って static const メンバとして定義しているのですが、定義だけ cpp ファイルに分かれる形になっているため、これをヘッダーにまとめたいです。
どちらも enum の定数に対応する値を格納するもので中身はコンパイル時から変わらないですが、ヘッダーファイルに書くことはできないのでしょうか。enum に対応する値のテーブルをヘッダーに一緒に定義できる方法があれば、他の方法も可です。
よろしくおねがいします。
コード
type.hpp
cpp
1#ifndef CPP_TEST 2#define CPP_TEST 3 4#include <map> 5#include <string> 6#include <vector> 7 8class Atom { 9public: 10 enum Type { H, He, Li }; 11 12 static const std::vector<std::string> Name; 13}; 14 15class Permisson { 16public: 17 enum Type { Read = 1, Write = 2, Execute = 4 }; 18 19 static const std::map<int, std::string> Name; // 0, 1, 2, ... の定数でないので map にしてる 20}; 21 22#endif /* CPP_TEST */
type.cpp
↓定義だけ cpp に分かれてしまっているので、できれば1つのファイルにまとめたい。
cpp
1#include "type.hpp" 2 3const std::vector<std::string> Atom::Name = {"Hydrogen", "Helium", "Lithium"}; 4 5const std::map<int, std::string> Permisson::Name = { 6 {Permisson::Read, "Read"}, 7 {Permisson::Write, "Write"}, 8 {Permisson::Execute, "Execute"}, 9}; 10
cpp
1#include <iostream> 2 3#include "type.hpp" 4 5int main(int, char **) 6{ 7 std::cout << Atom::Name[Atom::H] << std::endl; 8 std::cout << Permisson::Name.at(Permisson::Read) << std::endl; 9}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/05 17:23