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

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

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

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

Q&A

解決済

1回答

804閲覧

C++のアロー演算子直後のtemplate記述

mask_mus

総合スコア37

C++

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

1グッド

0クリップ

投稿2021/08/19 04:05

C++のプログラムにおいて、以下の様にアロー演算子直後のtemplateの記述はどのように解釈すれば良いのでしょうか。

c++

1std::shared_ptr<const TypeA> 2func(std::unique_ptr<TypeA, TypeC> arg){ 3 // 省略 4 return data->template func<TypeA, TypeB>(arg, opt); 5}
SaitoAtsushi👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

この場合の template というキーワードは func がテンプレートであることを明示しています。 data がテンプレートによって作られた型である場合、 func が関数テンプレートであるということがわからない場合があるので func がテンプレートであることをプログラマが教えなければならない場合があるのです。

例えば以下の例において、 template キーワードを除去するとコンパイルエラーになります。

#include <memory> template<class T> struct foo { template<class U> void bar() {} }; template<class T> void baz(void) { std::unique_ptr<foo<T>> data; data->template bar<int>(); // ← ここに template キーワードが必要 } int main(void) { baz<int>(); }

T が何なのかわかるまでは foo<T> がどういう型なのかわかりません。 この時点ではメンバ bar がテンプレートであることをコンパイラは見抜けないルールになっています。 わからないので教える必要があるわけです。

投稿2021/08/19 05:19

SaitoAtsushi

総合スコア5466

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問