C++ STL vectorのstatic_castについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
chibago

C++ STL vectorのstatic_castについて

#1

投稿記事 by chibago » 12年前

皆様、お世話になっております。
表題のとおりvector に格納したfloatをdoubleに型変換したいと考えております。
以下のようなプログラムはgccではエラーになります。

コード:

#include <iostream>
#include <vector>

int main(){
  std::vector<float> vec_float;
  vec_float.push_back(1.0);
  vec_float.push_back(2.0);
  vec_float.push_back(3.0);
  vec_float.push_back(4.0);
  std::vector<double> vec_double = static_cast<std::vector<double> &>(vec_float);
  return 0;
}
エラー文は以下のとおりです。
test2.cpp:10:80: エラー: invalid static_cast from type ‘std::vector<float>’ to type ‘std::vector<double>&’
元々static_cast出来ないものなのでしょうか。

なお、本命としては多次元vectorに対処したいため、キャストで対応できればと思います。
なければ、変換関数を作るしかないと思いますので、無い旨をお知らせいただければ
幸です。

アバター
GRAM
記事: 164
登録日時: 13年前
住所: 大阪

Re: C++ STL vectorのstatic_castについて

#2

投稿記事 by GRAM » 12年前

コンストラクタにはイテレーターをとるものがあります。
実際に使われる場合が説明からはよくわかりませんが、
この場合はキャストではなくて初期化なのでこれでいいでしょう。
本当にキャストが必要ですか?

コード:


#include <iostream>
#include <vector>
#include <algorithm>

void Output( double d){
	std::cout << d << '\n';
}

int main(){
  std::vector<float> vec_float;
  vec_float.push_back(1.0);
  vec_float.push_back(2.0);
  vec_float.push_back(3.0);
  vec_float.push_back(4.0);
  std::vector<double> vec_double( vec_float.begin(), vec_float.end() );


  std::for_each( vec_double.begin(), vec_double.end(), Output);
  std::cout << std::endl;
  return 0;
}

chibago

Re: C++ STL vectorのstatic_castについて

#3

投稿記事 by chibago » 12年前

GRAMさん
お返事ありがとうございます。
確かに一次元vectorならこれでも充分ですが、
本当に処理したいのは多次元vectorです。
(先に示した例はエラーの様子を示すためです。)

こうなると、おそらく関数を作る必要があるのではないかと思います。
キャストで代用できるのであれば、一番簡単です。

キャストの方法出きるのか出来ないのかだけはっきりすれば、
踏ん切りがつくのですが。

アバター
うしお
記事: 56
登録日時: 13年前

Re: C++ STL vectorのstatic_castについて

#4

投稿記事 by うしお » 12年前

なぜキャストできないのか?
というのは、std::vector<float> と std::vector<double>という型はまったく違う型である、
ということに起因しています。なので多次元対応のキャストはやはり無理があるかと思います。

chibago

Re: C++ STL vectorのstatic_castについて

#5

投稿記事 by chibago » 12年前

うしおさん、
ありがとうございます。

出来ないということが分かっただけでも収穫です。
自分で変換ツールを作ろうと思います。
(boostなどであれば良かったのですが)

chibago

Re: C++ STL vectorのstatic_castについて

#6

投稿記事 by chibago » 12年前

解決を選ぶのを忘れていました。

閉鎖

“C言語何でも質問掲示板” へ戻る