掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7702

classにテンプレート関数を入れたいですが、できます?
投稿者---古い初心者(2007/07/23 19:08:44)


いつもいつもお世話になっております。
さて
非 template classに template 関数を定義したいですが、
定義しても実行の時認識してくれない問題に悩んでいます。
目的:
非 template classに template 関数を定義して、
そのメンバーをじかに参照できるようなtemplate 関数を利用したいです。
template 関数の定義体を直接class内に入れて問題なくコンパイラーできたが、fun<T>();
のように実行させようとしたら、
”Tが要らない”というコンパイラーエラーでてきて、
<T>を省いたら、今度は”<T>を省くことができない”という。
馬鹿にされているようですね。

ご存知の方お願い致します。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:classにテンプレート関数を入れたいですが、できます? 7705 Ban 2007/07/23 19:41:53


No.7705

Re:classにテンプレート関数を入れたいですが、できます?
投稿者---Ban(2007/07/23 19:41:53)


言語仕様的には可能ですが、
VC6では確かメンバtemplate関数には対応していません。
(VC7.1等では可能です)


この投稿にコメントする

削除パスワード

No.7706

Re:classにテンプレート関数を入れたいですが、できます?
投稿者---yoh2(2007/07/23 21:33:39)


>言語仕様的には可能ですが、
>VC6では確かメンバtemplate関数には対応していません。
>(VC7.1等では可能です)

実引数の型によるテンプレートパラメータ自動推論を行わせれば成功するっぽいです。

昔のC++のテンプレート関数にはテンプレートパラメータを明示的に指定する方法が
なく、必ず実引数の型による推論を行わせなければならなかったらしいです。(伝聞。未確認)
以前の、仮引数にテンプレートパラメータとして記述された型を含めないと期待通りの
動作をしない件も含め、VC++6は、上記の古い仕様を半端に引き摺っているのではないでしょうか。
# 古い仕様を半端に拡張した、という見方もできるかも。
# そもそも現在のC++標準制定前の処理系だし。


ところで、このスレッドも含め、C++の話題に散々参加した後で言うのも何ですが、
ここって、C++の話題もOKなんでしょうか?>管理人様

好ましくないなら、他サイトを紹介した方がいいかなぁ。


この投稿にコメントする

削除パスワード

No.7707

Re:classにテンプレート関数を入れたいですが、できます?
投稿者---RAPT(2007/07/23 23:19:43)
http://rapt21.com


ちょっと前のスレッドで、fun<T>( T* dummy = 0 ); って宣言して
回避する裏ワザが紹介されていましたね>VC6のtemplate

>ここって、C++の話題もOKなんでしょうか?>管理人様
以前、まぁ、C++ もOKでしょ的なことをおっしゃっていたと記憶しています。


この投稿にコメントする

削除パスワード

No.7713

Re:classにテンプレート関数を入れたいですが、できます?
投稿者---Ban(2007/07/24 04:38:07)


>実引数の型によるテンプレートパラメータ自動推論を行わせれば成功するっぽいです。

そうだったのですか/そうでしたっけ。
なんか未対応だったように記憶してました。
# MSのサポートも切れましたし個人ではVC6捨ててるんですよね…。
# まだ使わざるをえない人が散見されるのがかわいそう。

>好ましくないなら、他サイトを紹介した方がいいかなぁ。
以前、「メインはあくまでCだけどC++も禁止とまではいわない」
くらいのスタンスで発言されてたような。


この投稿にコメントする

削除パスワード

No.7714

Re:classにテンプレート関数を入れたいですが、できます?
投稿者---古い初心者(2007/07/24 09:11:28)


皆さん
ご指導本当に有難う御座いました。
いい勉強になりました。
VC6.0を使わざるを得ないというちょっと悲しい事情があって、
まあ、一応マクロのことも再検討しようかなと思っています。
デバッグ不便なこともありますが、template関数の多くはマクロでも実現できるような気がします。

また宜しくお願い致します



この投稿にコメントする

削除パスワード

No.7719

Re:classにテンプレート関数を入れたいですが、できます?
投稿者---yoh2(2007/07/24 21:03:30)


> VC6.0を使わざるを得ないというちょっと悲しい事情があって、

私の職場でもまだまだVC6が現役だったりします。来年には2008も出るというのに。

VC6のC++は、現行のC++とだいぶ仕様が異なっていたり、バグがあったり
しますので、書籍やWebサイトにあった情報通りにしても動かない、という
ことがちょくちょく起こります。
# そして、それが原因で、現行のVCへの移行が非常に困難になっているという……

このあたりの問題がまとめられているページをふたつほど紹介しておきます。

http://support.microsoft.com/kb/q243451/
http://boost.cppll.jp/HEAD/more/microsoft_vcpp.html

# 下の方のリンク先では、SP4の問題、となっていますが、VC6の最終
# バージョンであるSP6でも全く同じです。

あと、C++規格のみではなく、VC++6付属MFCにも、あまりレアケースといえない、
つまりちょくちょく引っかかりそうなバグがいろいろとあるのですが、
こっちはうまくまとめられているサイトを知らず、紹介できません。
サポートが打ち切られてだいぶ経っているので、情報を探すのも困難に
なってきていますが、こまめに情報収拾するようにしてみて下さい。


この投稿にコメントする

削除パスワード

No.7724

Re:classにテンプレート関数を入れたいですが、できます?
投稿者---古い初心者(2007/07/25 11:26:15)


yoh2様
丁寧なご解説と情報本当に有難う御座います。
マクロで代用しようとしていますが、今度デバグは大変です。
考え見れば、いろいろ異なるタイプの変数に"自動"対応するために、
templateメソッドはやはり理想ですね。
># そして、それが原因で、現行のVCへの移行が非常に困難になっているという……
これにもっとも心配しています。

2008もう待ちきれない、、、

ほんとうにありがおうございました
また宜しくお願いいたします。






この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ