自分の備忘録のために投稿する。 ヘッダにはテンプレート関数の宣言のみ記述し、定義は実装ファイルに書く場合、単純にヘッダと実装を分離したのではリンクエラーが出るが、下記の様にすればリンクエラーを回避できる。 本手法はBoostでも使用されている手法であるため、悪くない手法であると思う。 Utility.h : テンプレート関数の宣言のみ記述したファイル // Utility.h #pragma once #include <string> template<typename T> class Utility { public: std::string toString(const T & value); }; #include "details/Utility.h"
![テンプレート関数の宣言と実装を分離する方法 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/8a5984db8a5652cdde9a5001b66057ecfbe840b3/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgzJTg2JUUzJTgzJUIzJUUzJTgzJTk3JUUzJTgzJUFDJUUzJTgzJUJDJUUzJTgzJTg4JUU5JTk2JUEyJUU2JTk1JUIwJUUzJTgxJUFFJUU1JUFFJUEzJUU4JUE4JTgwJUUzJTgxJUE4JUU1JUFFJTlGJUU4JUEzJTg1JUUzJTgyJTkyJUU1JTg4JTg2JUU5JTlCJUEyJUUzJTgxJTk5JUUzJTgyJThCJUU2JTk2JUI5JUU2JUIzJTk1JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1jZGVhMGUzMzRmMDAzOTU2YzQyYjUwNWI0NDQ5MWYyOQ%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwTWFzYXlhTWl6dWhhcmEmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTVjZjkzZWZlOTZhZTUzODdkMWM2OWE5MThlYzVlZDJm%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D6dcf910badb004c7425e5d508d7eb51a)