0

enable_if を使用して、次のようなパラメーター タイプごとに動作を分離できます。

std::vector<int>

ここで、コンテナーの内部タイプによって動作を分離したいと思います。

int of std::vector<int>

C++ で何ができますか?

4

2 に答える 2

3

これがあなたの言いたいことなのだろうか:

#include<iostream>
#include<vector>
#include<type_traits>

// The following function will display the contents of the provided T
// only if its value_type trait is of type int.
template<typename T>
typename std::enable_if<
  std::is_same<typename T::value_type, int>::value,
  void>::type display(const T& data) {
  std::cout<<"Some ints:"<<std::endl;
  for(int xi : data) {
    std::cout<<xi<<" ";
  }
  std::cout<<std::endl;
}

int main() {
  std::vector<int> dint = {1, 2, 3, 4, 5, 6};
  display(dint);

  std::vector<float> dfloat = {1, 2, 3, 4, 5, 6};

  // The following call would lead to compile-time error, because
  // there is no display function activated for float types:

  //display(dfloat);
  return 0;
}

g++ example.cpp -std=c++11 -Wall -Wextra(GCC 4.8.1を使用するOS X 10.7.4)でコンパイルすると、次の結果が得られます。

$ ./a.out 
Some ints:
1 2 3 4 5 6 

予想どおり、行のコメントを外すとdisplay(dfloat)、コンパイラ エラー メッセージに次のものが含まれます。

error: no matching function for call to ‘display(std::vector<float>&)’
于 2013-11-08T03:22:13.577 に答える
0

次のようなもので、どこに 、 などを記入できintますdoubleS?

std::vector<std::enable_if<std::is_same<T, S>::value, S>::type>
于 2013-11-08T03:05:36.430 に答える