【问题标题】:Templated explicit conversion operator模板化显式转换运算符
【发布时间】:2012-09-07 12:24:23
【问题描述】:

所以,我有这个模板类,我正在尝试为其编写一个通用转换运算符。 我想出的是这个(不起作用:“错误 - 'typename'之后需要一个限定名称”):

template <typename T>
class object{
...
T internal;
...
template <typename U>
explicit operator typename decltype(
std::conditional< 
     std::is_convertible<T, U>::type , U, T>::type)()
{
return static_cast<std::conditional<std::is_convertible<T, U>::type ,U, T>::type>(internal);
}

我做错了什么还是不可能?

【问题讨论】:

  • 请注意std::is_convertible&lt;T, T&gt; 在很多情况下都成立。
  • 实际上你想做什么?

标签: c++ templates


【解决方案1】:

设法找到我自己的解决方案:

    template <typename U>
    explicit operator typename decltype(std::conditional< 
                                        std::is_convertible<T, U>::type , 
                                        U, 
                                        T>::type)::value_type ()

    {
        return static_cast<typename decltype(std::conditional< 
                        std::is_convertible<T, U>::type , 
                        U, 
                        T>::type)::value_type>(internal);
    }

【讨论】:

  • 你用的是什么编译器? decltype 不应该在那里工作。
  • 我相信它确实需要std::conditional&lt;&gt;::type 之前的类型名,因为它是依赖的,不一定是类型。此外,只有少数类型具有嵌套的 value_type 类型,这似乎表明您的实际问题与您所要求的不同。将来考虑提出您想要解决的真正的问题。这并不能回答您提出的问题。
  • @R.MartinhoFernandes gcc 4.7.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2020-10-14
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多