1

そのため、Windows でクリップボードの内容を取得しようとしています。テンプレートを使用して取得するタイプは何でもかまいませんが、ビルドしようとすると、Visual Studio 2013 RC が次のエラーを送信します。

Error   1   error C2440: 'return' : cannot convert from 'char *' to 'double'
Error   2   error C2440: 'return' : cannot convert from 'double' to 'char *'    
Error   3   error C2440: 'return' : cannot convert from 'int' to 'char *'   
Warning 4   warning C4244: 'return' : conversion from 'double' to 'int', possible loss of data    
Error   5   error C2440: 'return' : cannot convert from 'char *' to 'int'

コードは次のとおりです。

template<typename tn>
tn GetClipboardContents()
{
    HANDLE h_clip;
    double d_clip;
    int i_clip;
    char* str_clip;
    if (OpenClipboard(NULL))
    {
        h_clip = GetClipboardData(CF_TEXT);
        if (typeid(tn).name() == "double")
        {
            d_clip = atof((char*)h_clip);
        }else if (typeid(tn).name() == "int"){
            i_clip = atoi((char*)h_clip);
        }else{
            str_clip = (char*)h_clip;
        }
        CloseClipboard();
    }

    if (typeid(tn).name() == "double")
        return d_clip;
    else if (typeid(tn).name() == "int")
        return i_clip;
    else
        return str_clip;
}

前もって感謝します。

4

2 に答える 2

0

異なる型を返す複数のリターン パスがあります。次のようなテンプレートのオーバーロードを使用する必要があります。

template <typename tn>
tn GetClipboardContents();


template <>
double GetClipboardContents<double>()
{
    // Add double implementation here
}

template <>
int GetClipboardContents<int>()
{
    // Add int implementation here
}

他のタイプについても繰り返します

于 2013-10-07T03:37:10.420 に答える