2017-07-21 6 views
0

私はWindows(Visual Studio 2017)で書かれたユニットテストをいくつか行いましたが、それらをLinuxに移植する必要があります(GCC 4.9.2 - 私はこのバージョンに固執しています...)。私はWindows上でうまくコンパイルする私の問題のための簡単な例が付属しています(MyParamTypeはeテンプレートベースクラスの従属型です)、Linuxではコンパイルされません。変更することでgtestの取得方法TYPED_TESTパラメータタイプ

#include <gtest/gtest.h> 

template<typename T> 
struct MyTest : public testing::Test 
{ 
    using MyParamType = T; 
}; 

using MyTypes = testing::Types<int, float>; 
TYPED_TEST_CASE(MyTest, MyTypes); 

TYPED_TEST(MyTest, MyTestName) 
{ 
    MyParamType param; 
} 

In member function ‘virtual void MyTest_MyTestName_Test::TestBody()’:error: ‘MyParamType’ was not declared in this scope MyParamType param;

TYPED_TEST(MyTest, MyTestName) 
{ 
    typename MyTest<gtest_TypeParam_>::MyParamType param; 
} 

コードがコンパイルされ、それは非常に醜いです。

TYPED_TESTからテンプレートパラメータタイプを取得する簡単な方法がありますか?

+0

私はGTESTこの – Felics

答えて

2

答えはドキュメントの中に隠されている:

#include <gtest/gtest.h> 

template<typename T> 
struct MyTest : public testing::Test 
{ 
    using MyParamType = T; 
}; 

using MyTypes = testing::Types<int, float>; 
TYPED_TEST_CASE(MyTest, MyTypes); 

TYPED_TEST(MyTest, MyTestName) 
{ 
    // To refer to typedefs in the fixture, add the 'typename TestFixture::' 
    // prefix. The 'typename' is required to satisfy the compiler. 

    using MyParamType = typename TestFixture::MyParamType; 
} 

https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md

+0

のために正確に 'TypeParam'を定義しますが、'同じことをTypeParam'されていること気付きましたか? 「T」と定義されているようです – Felics