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

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

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

Unreal Engineは、Epic Games社によって開発されたゲームエンジンです。高レベルの移植性を持っており、様々なプラットフォームのゲーム開発が可能。GitHubアカウントを登録すれば無料でダウンロードできます。

C++

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

Q&A

解決済

2回答

1044閲覧

サンプルコードの1行が全く理解できないです。

konataro

総合スコア37

Unreal Engine

Unreal Engineは、Epic Games社によって開発されたゲームエンジンです。高レベルの移植性を持っており、様々なプラットフォームのゲーム開発が可能。GitHubアカウントを登録すれば無料でダウンロードできます。

C++

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

0グッド

2クリップ

投稿2019/02/15 11:16

編集2019/02/15 11:31

youtubeのチュートリアル動画で書かれているコードなのですが、まったく文法的に理解できない一行がありました。

C++

1AAIBotController::AAIBotController() 2{ 3 PrimaryActorTick.bCanEverTick = true; 4/**************************************************************************************/ 5 SightConfig = CreateDefaultSubobject<UAISenceConfig_Sight>(TEXT("Sight Config")); 6/**************************************************************************************/ 7 SetPerceptionComponent(*CreateDefaultSubobject<UAIPerceptionComponent>(TEXT("Perception Component"))); 8 9 SightConfig->SightRadius = AISightRadius; 10 SightConfig->LooseSightRadius = AISightAge; 11 SightConfig->PeripheralVisionAngleDegrees = AIFieldOfView; 12 SightConfig->SetMaxAge(AISightAge); 13 14 SightConfig->DetectionByAffiliation.bDetectEnemies = true; 15 SightConfig->DetectionByAffiliation.bDetectFriendlies = true; 16 SightConfig->DetectionByAffiliation.bDetectNeutrals = true; 17 18 GetPerceptionComponent()->SetDominantSense(*SightConfig->GetSenseImplementation()); 19 GetPerceptionComponent()->OnPerceptionUpdated.AddDynamic(this, &AAIBotController::OnPawnDetected); 20 GetPerceptionComponent()->ConfigureSense(*SightConfig); 21 22}

コメントで強調してある部分ですが、クラスとテンプレートと、マクロなどで何をしているのかいまいちよくわかりません。

https://api.unrealengine.com/INT/API/Runtime/CoreUObject/UObject/FObjectInitializer/CreateDefaultSubobject/2/index.html

※追記
マクロ部分などは解決しましたが、テンプレートの意味がまだあまり分かってません・・・

Syntax

1template<class TReturnType, class TClassToConstructByDefault> 2TReturnType * CreateDefaultSubobject 3( 4 UObject * Outer, 5 FName SubobjectName, 6 bool bTransient 7)

これがシンタックス部分なのですが、

Syntax

1template<class TReturnType, class TClassToConstructByDefault>

これがテンプレートを使用した宣言で、一つが戻り値の型となるクラスなのはわかるのですが、もう一つのTClassToConstructByDefaultが意味わかりません。

どうかよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

定義を記載されているCreateDefaultSubobjectは、テンプレート仮引数としてTReturnTypeとTClassToConstructByDefaultを持つ関数テンプレート定義です。

コメントで強調されているCreateDefaultSubobjectはテンプレート実引数としてUAISenceConfig_Sightを与えた関数テンプレートの明示的実体化(と呼び出し)です。

テンプレート引数の数が一致しませんので、両者はオーバーロードされた別物です。
どこかに例えば下記のような関数テンプレートも存在する筈です。

C++

1template<class TReturnType> 2TReturnType * CreateDefaultSubobject(TCHAR*); 3

投稿2019/02/15 13:01

Chironian

総合スコア23272

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

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

konataro

2019/02/15 16:45

なるほど! テンプレートでもオーバーロードできるのですね!APIリファレンスを再度調べてみたところ、引数の数が一致するシンタックスがありました。 template<class TReturnType> TReturnType * CreateDefaultSubobject ( UObject * Outer, FName SubobjectName, bool bTransient ) 丁寧な説明、ありがとうございます。m(_ _)m
guest

0

UAISenceConfig_Sight型を受け取るジェネリック型CreateDefaultSubobjectの、文字列を引数とするコンストラクタの呼び出し、ですかね

投稿2019/02/15 11:53

y_waiwai

総合スコア87749

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

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

konataro

2019/02/15 12:06

ジェネリック型とはテンプレートのことでしょうか(T_T)すいません。無知なもので・・・
konataro

2019/02/15 16:47

C#ではテンプレートのことをジェネリック型と言うのですね!URL参考にさせていただきますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問