質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

298閲覧

構造体has_iterator_implをhas_iterator以外で使用不可にしたい

asobinin

総合スコア69

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/06/19 16:23

以下のコードにおいて、has_iteratorはその型がメンバにイテレータを持っているか調べる構造体です。
has_iteratorはhas_iterator_implを継承していますが、実際に外で使われるものはhas_iteratorのみでimplが使われることは想定しておりません。
ユーザーが不用意にimplを使用してしまわないように外からはアクセスができないようにしてしまいたいのですが、何か良い方法はありますか。

Cpp

1// has_iterator.hpp------------------------------ 2#pragma once 3#include <type_traits> 4 5// 外から丸見えなのをどうにかしたい 6struct has_iterator_impl { 7 template <class T> 8 static std::true_type check(typename T::iterator*); 9 10 template <class T> 11 static std::false_type check(...); 12}; 13 14// 実際に使われる方 15template <class T> 16struct has_iterator : public decltype(has_iterator_impl::check<T>(nullptr)) {}; 17

Cpp

1// main.cpp-------------------------------------- 2#include <iostream> 3#include <vector> 4#include "has_iterator.hpp" 5 6int main() { 7 using ivector = std::vector<int>; 8 static_assert(has_iterator<ivector>::value, "vector has iterator"); 9 static_assert(has_iterator<int>::value, "int has not iterator"); 10 11 return 0; 12}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

習慣に従って detail 等の名前空間にいれて、「ここは使わないでね」マークをつけるのが現実的と思います。こんな感じです。

privateな名前空間があると嬉しいですよね。昔、それっぽいものを作ったことはあるのですが、残念ながら実用にはならないと判断しています。使える場面もあるかもしれませんので、よかったら参考にしてみて下さい。苦労した挙げ句、結局「使えない」という落ちになる可能性も高いので、あまり期待しないで見て下さい。

投稿2019/06/19 17:00

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asobinin

2019/06/20 01:58

やはり棚の奥に隠して、使えなくではなく使いにくくする方法しか用意されていないのですね……何故無いのか疑問ではありますが
asobinin

2019/06/20 02:02

標準化されていない機能を使用しようとした場合は、周囲への説明と説得が大変そうですね(笑)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問